tau-coding-agent 0.6.8__tar.gz → 0.7.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 (500) hide show
  1. {tau_coding_agent-0.6.8/tau_coding_agent.egg-info → tau_coding_agent-0.7.0}/PKG-INFO +2 -2
  2. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/pyproject.toml +3 -2
  3. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/agent/prompt/builder.py +14 -1
  4. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/extensions/sandbox/__init__.py +8 -1
  5. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/console/cli.py +4 -1
  6. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/extensions/loader.py +26 -5
  7. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/inference/provider/oauth/anthropic_claude_code.py +3 -5
  8. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/inference/provider/oauth/github_copilot.py +3 -5
  9. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/inference/provider/oauth/google_antigravity.py +3 -5
  10. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/inference/provider/oauth/openai_codex.py +3 -5
  11. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/inference/provider/oauth/xai_grok.py +3 -5
  12. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/inference/provider/types.py +4 -2
  13. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/tui/utils.py +19 -10
  14. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/utils/version_check.py +24 -11
  15. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0/tau_coding_agent.egg-info}/PKG-INFO +2 -2
  16. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau_coding_agent.egg-info/requires.txt +1 -1
  17. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/LICENSE +0 -0
  18. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/MANIFEST.in +0 -0
  19. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/README.md +0 -0
  20. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/docs/architecture.md +0 -0
  21. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/docs/auth.md +0 -0
  22. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/docs/cli-reference.md +0 -0
  23. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/docs/creating-tools.md +0 -0
  24. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/docs/development.md +0 -0
  25. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/docs/docs.json +0 -0
  26. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/docs/engine.md +0 -0
  27. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/docs/extension-settings.md +0 -0
  28. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/docs/extensions.md +0 -0
  29. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/docs/http-proxy.md +0 -0
  30. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/docs/index.md +0 -0
  31. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/docs/inference-providers.md +0 -0
  32. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/docs/inference.md +0 -0
  33. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/docs/installation.md +0 -0
  34. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/docs/keybindings.md +0 -0
  35. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/docs/messages.md +0 -0
  36. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/docs/project-context.md +0 -0
  37. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/docs/project-structure.md +0 -0
  38. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/docs/prompts.md +0 -0
  39. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/docs/python-api.md +0 -0
  40. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/docs/quickstart.md +0 -0
  41. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/docs/sessions.md +0 -0
  42. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/docs/settings.md +0 -0
  43. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/docs/skills.md +0 -0
  44. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/docs/themes.md +0 -0
  45. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/docs/tools.md +0 -0
  46. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/docs/tui.md +0 -0
  47. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/docs/usage.md +0 -0
  48. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/setup.cfg +0 -0
  49. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/__init__.py +0 -0
  50. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/agent/__init__.py +0 -0
  51. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/agent/embedded.py +0 -0
  52. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/agent/prompt/__init__.py +0 -0
  53. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/agent/prompt/types.py +0 -0
  54. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/agent/service.py +0 -0
  55. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/agent/types.py +0 -0
  56. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/auth/manager.py +0 -0
  57. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/auth/storage.py +0 -0
  58. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/auth/types.py +0 -0
  59. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/__init__.py +0 -0
  60. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/commands/__init__.py +0 -0
  61. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/commands/clear.py +0 -0
  62. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/commands/compact.py +0 -0
  63. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/commands/reload.py +0 -0
  64. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/commands/session.py +0 -0
  65. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/extensions/ask_user/__init__.py +0 -0
  66. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/extensions/ask_user/component.py +0 -0
  67. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/extensions/ask_user/manifest.json +0 -0
  68. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/extensions/ask_user/schema.py +0 -0
  69. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/extensions/ask_user/tool.py +0 -0
  70. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/extensions/btw/__init__.py +0 -0
  71. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/extensions/footer/__init__.py +0 -0
  72. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/extensions/footer/git.py +0 -0
  73. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/extensions/footer/model.py +0 -0
  74. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/extensions/footer/utils.py +0 -0
  75. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/extensions/header/__init__.py +0 -0
  76. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/extensions/loop/README.md +0 -0
  77. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/extensions/loop/__init__.py +0 -0
  78. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/extensions/loop/dispatch.py +0 -0
  79. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/extensions/loop/duration.py +0 -0
  80. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/extensions/loop/state.py +0 -0
  81. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/extensions/sandbox/manager.py +0 -0
  82. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/extensions/sandbox/manifest.json +0 -0
  83. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/extensions/sandbox/sandbox_tool.py +0 -0
  84. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/extensions/subagent/__init__.py +0 -0
  85. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/extensions/subagent/agents/context-builder.md +0 -0
  86. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/extensions/subagent/agents/delegate.md +0 -0
  87. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/extensions/subagent/agents/oracle.md +0 -0
  88. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/extensions/subagent/agents/planner.md +0 -0
  89. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/extensions/subagent/agents/researcher.md +0 -0
  90. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/extensions/subagent/agents/reviewer.md +0 -0
  91. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/extensions/subagent/agents/scout.md +0 -0
  92. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/extensions/subagent/agents/worker.md +0 -0
  93. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/extensions/subagent/agents.py +0 -0
  94. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/extensions/subagent/manifest.json +0 -0
  95. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/extensions/subagent/subagent_schema.py +0 -0
  96. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/extensions/subagent/subagent_tool.py +0 -0
  97. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/extensions/todo/__init__.py +0 -0
  98. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/extensions/todo/manifest.json +0 -0
  99. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/extensions/todo/todo_schema.py +0 -0
  100. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/extensions/todo/todo_tool.py +0 -0
  101. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/extensions/watch/__init__.py +0 -0
  102. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/extensions/web/__init__.py +0 -0
  103. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/extensions/web/engines/__init__.py +0 -0
  104. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/extensions/web/engines/base.py +0 -0
  105. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/extensions/web/engines/ddgs_engine.py +0 -0
  106. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/extensions/web/engines/exa_engine.py +0 -0
  107. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/extensions/web/engines/jina_engine.py +0 -0
  108. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/extensions/web/engines/tavily_engine.py +0 -0
  109. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/extensions/web/manifest.json +0 -0
  110. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/extensions/web/tools/__init__.py +0 -0
  111. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/extensions/web/tools/fetch.py +0 -0
  112. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/extensions/web/tools/search.py +0 -0
  113. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/extensions/workflow/__init__.py +0 -0
  114. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/extensions/workflow/agent_discovery.py +0 -0
  115. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/extensions/workflow/manifest.json +0 -0
  116. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/extensions/workflow/model.py +0 -0
  117. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/extensions/workflow/runner.py +0 -0
  118. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/extensions/workflow/skills/create-workflows/SKILL.md +0 -0
  119. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/extensions/workflow/store.py +0 -0
  120. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/models/__init__.py +0 -0
  121. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/models/audio.py +0 -0
  122. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/models/image.py +0 -0
  123. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/models/text.py +0 -0
  124. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/models/video.py +0 -0
  125. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/prompts/commit.md +0 -0
  126. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/prompts/docs.md +0 -0
  127. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/prompts/explain.md +0 -0
  128. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/prompts/fix.md +0 -0
  129. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/prompts/refactor.md +0 -0
  130. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/prompts/review.md +0 -0
  131. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/prompts/test.md +0 -0
  132. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/providers/__init__.py +0 -0
  133. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/providers/audio.py +0 -0
  134. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/providers/image.py +0 -0
  135. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/providers/text.py +0 -0
  136. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/providers/video.py +0 -0
  137. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/skills/code-review/SKILL.md +0 -0
  138. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/skills/debug/SKILL.md +0 -0
  139. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/skills/git-commit/SKILL.md +0 -0
  140. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/skills/skill-creator/LICENSE.txt +0 -0
  141. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/skills/skill-creator/SKILL.md +0 -0
  142. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/themes/ayu-dark.yaml +0 -0
  143. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/themes/catppuccin.yaml +0 -0
  144. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/themes/dark.yaml +0 -0
  145. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/themes/dracula.yaml +0 -0
  146. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/themes/everforest.yaml +0 -0
  147. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/themes/gruvbox.yaml +0 -0
  148. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/themes/horizon.yaml +0 -0
  149. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/themes/kanagawa.yaml +0 -0
  150. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/themes/light.yaml +0 -0
  151. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/themes/material-ocean.yaml +0 -0
  152. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/themes/monokai.yaml +0 -0
  153. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/themes/night-owl.yaml +0 -0
  154. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/themes/nord.yaml +0 -0
  155. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/themes/one-dark.yaml +0 -0
  156. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/themes/rose-pine.yaml +0 -0
  157. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/themes/solarized-dark.yaml +0 -0
  158. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/themes/tokyo-night.yaml +0 -0
  159. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/tools/__init__.py +0 -0
  160. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/tools/edit.py +0 -0
  161. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/tools/glob.py +0 -0
  162. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/tools/grep.py +0 -0
  163. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/tools/ls.py +0 -0
  164. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/tools/read.py +0 -0
  165. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/tools/terminal.py +0 -0
  166. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/tools/utils.py +0 -0
  167. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/builtins/tools/write.py +0 -0
  168. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/commands/__init__.py +0 -0
  169. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/commands/registry.py +0 -0
  170. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/commands/types.py +0 -0
  171. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/console/__init__.py +0 -0
  172. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/console/commands/__init__.py +0 -0
  173. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/console/commands/auth.py +0 -0
  174. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/console/commands/packages.py +0 -0
  175. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/console/commands/update.py +0 -0
  176. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/core/__init__.py +0 -0
  177. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/core/registry.py +0 -0
  178. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/engine/__init__.py +0 -0
  179. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/engine/service.py +0 -0
  180. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/engine/types.py +0 -0
  181. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/extensions/__init__.py +0 -0
  182. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/extensions/api.py +0 -0
  183. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/extensions/context.py +0 -0
  184. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/extensions/runtime.py +0 -0
  185. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/extensions/settings.py +0 -0
  186. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/hooks/__init__.py +0 -0
  187. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/hooks/engine.py +0 -0
  188. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/hooks/inference.py +0 -0
  189. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/hooks/runtime.py +0 -0
  190. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/hooks/service.py +0 -0
  191. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/hooks/session.py +0 -0
  192. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/hooks/tui.py +0 -0
  193. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/hooks/types.py +0 -0
  194. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/inference/__init__.py +0 -0
  195. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/inference/api/__init__.py +0 -0
  196. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/inference/api/audio/__init__.py +0 -0
  197. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/inference/api/audio/base.py +0 -0
  198. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/inference/api/audio/builtins.py +0 -0
  199. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/inference/api/audio/elevenlabs_audio.py +0 -0
  200. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/inference/api/audio/gemini_audio.py +0 -0
  201. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/inference/api/audio/openai_audio.py +0 -0
  202. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/inference/api/audio/registry.py +0 -0
  203. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/inference/api/audio/sarvam_audio.py +0 -0
  204. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/inference/api/audio/service.py +0 -0
  205. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/inference/api/audio/utils.py +0 -0
  206. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/inference/api/availability.py +0 -0
  207. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/inference/api/image/__init__.py +0 -0
  208. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/inference/api/image/base.py +0 -0
  209. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/inference/api/image/builtins.py +0 -0
  210. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/inference/api/image/gemini_image.py +0 -0
  211. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/inference/api/image/openai_image.py +0 -0
  212. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/inference/api/image/openrouter.py +0 -0
  213. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/inference/api/image/registry.py +0 -0
  214. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/inference/api/image/service.py +0 -0
  215. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/inference/api/registry.py +0 -0
  216. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/inference/api/text/__init__.py +0 -0
  217. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/inference/api/text/anthropic_claude_code.py +0 -0
  218. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/inference/api/text/anthropic_messages.py +0 -0
  219. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/inference/api/text/anthropic_vertex.py +0 -0
  220. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/inference/api/text/base.py +0 -0
  221. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/inference/api/text/builtins.py +0 -0
  222. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/inference/api/text/dialect.py +0 -0
  223. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/inference/api/text/gemini_generate.py +0 -0
  224. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/inference/api/text/github_copilot_chat.py +0 -0
  225. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/inference/api/text/google_antigravity.py +0 -0
  226. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/inference/api/text/google_vertex.py +0 -0
  227. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/inference/api/text/mistral_chat.py +0 -0
  228. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/inference/api/text/ollama_chat.py +0 -0
  229. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/inference/api/text/openai_codex_responses.py +0 -0
  230. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/inference/api/text/openai_completions.py +0 -0
  231. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/inference/api/text/openai_responses.py +0 -0
  232. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/inference/api/text/openai_vertex.py +0 -0
  233. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/inference/api/text/registry.py +0 -0
  234. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/inference/api/text/service.py +0 -0
  235. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/inference/api/text/types.py +0 -0
  236. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/inference/api/text/utils.py +0 -0
  237. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/inference/api/text/xai_responses.py +0 -0
  238. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/inference/api/video/__init__.py +0 -0
  239. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/inference/api/video/base.py +0 -0
  240. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/inference/api/video/builtins.py +0 -0
  241. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/inference/api/video/fal_video.py +0 -0
  242. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/inference/api/video/openrouter_video.py +0 -0
  243. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/inference/api/video/registry.py +0 -0
  244. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/inference/api/video/service.py +0 -0
  245. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/inference/api/video/zai_video.py +0 -0
  246. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/inference/model/__init__.py +0 -0
  247. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/inference/model/registry.py +0 -0
  248. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/inference/model/types.py +0 -0
  249. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/inference/provider/__init__.py +0 -0
  250. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/inference/provider/oauth/__init__.py +0 -0
  251. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/inference/provider/oauth/pkce.py +0 -0
  252. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/inference/provider/oauth/types.py +0 -0
  253. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/inference/provider/oauth/utils.py +0 -0
  254. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/inference/provider/registry.py +0 -0
  255. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/inference/types.py +0 -0
  256. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/inference/utils.py +0 -0
  257. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/message/__init__.py +0 -0
  258. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/message/types.py +0 -0
  259. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/message/utils.py +0 -0
  260. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/modes/__init__.py +0 -0
  261. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/modes/interactive/__init__.py +0 -0
  262. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/modes/interactive/agent_hooks.py +0 -0
  263. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/modes/interactive/app.py +0 -0
  264. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/modes/interactive/commands/__init__.py +0 -0
  265. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/modes/interactive/commands/appearance.py +0 -0
  266. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/modes/interactive/commands/auth.py +0 -0
  267. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/modes/interactive/commands/context.py +0 -0
  268. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/modes/interactive/commands/extensions.py +0 -0
  269. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/modes/interactive/commands/misc.py +0 -0
  270. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/modes/interactive/commands/model.py +0 -0
  271. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/modes/interactive/commands/session.py +0 -0
  272. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/modes/interactive/components/__init__.py +0 -0
  273. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/modes/interactive/components/command_palette.py +0 -0
  274. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/modes/interactive/components/config_selector.py +0 -0
  275. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/modes/interactive/components/extension_selector.py +0 -0
  276. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/modes/interactive/components/file_picker.py +0 -0
  277. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/modes/interactive/components/layout.py +0 -0
  278. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/modes/interactive/components/message_list.py +0 -0
  279. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/modes/interactive/components/model_selector.py +0 -0
  280. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/modes/interactive/components/oauth_selector.py +0 -0
  281. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/modes/interactive/components/overlays.py +0 -0
  282. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/modes/interactive/components/selector_controller.py +0 -0
  283. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/modes/interactive/components/session_selector.py +0 -0
  284. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/modes/interactive/components/settings_selector.py +0 -0
  285. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/modes/interactive/components/theme_selector.py +0 -0
  286. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/modes/interactive/components/thinking_selector.py +0 -0
  287. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/modes/interactive/components/tree_selector.py +0 -0
  288. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/modes/interactive/components/trust_screen.py +0 -0
  289. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/modes/interactive/components/voice_selector.py +0 -0
  290. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/modes/interactive/input_handler.py +0 -0
  291. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/modes/interactive/ui_context.py +0 -0
  292. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/modes/print/__init__.py +0 -0
  293. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/modes/rpc/__init__.py +0 -0
  294. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/modes/rpc/mode.py +0 -0
  295. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/modes/rpc/types.py +0 -0
  296. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/packages/__init__.py +0 -0
  297. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/packages/manager.py +0 -0
  298. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/packages/types.py +0 -0
  299. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/packages/utils.py +0 -0
  300. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/prompts/expand.py +0 -0
  301. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/prompts/loader.py +0 -0
  302. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/prompts/registry.py +0 -0
  303. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/prompts/types.py +0 -0
  304. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/resources/__init__.py +0 -0
  305. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/resources/loader.py +0 -0
  306. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/resources/types.py +0 -0
  307. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/runtime/dependencies.py +0 -0
  308. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/runtime/service.py +0 -0
  309. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/runtime/types.py +0 -0
  310. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/session/branch_summarization.py +0 -0
  311. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/session/compaction.py +0 -0
  312. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/session/manager.py +0 -0
  313. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/session/types.py +0 -0
  314. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/session/utils.py +0 -0
  315. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/settings/manager.py +0 -0
  316. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/settings/paths.py +0 -0
  317. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/settings/storage.py +0 -0
  318. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/settings/types.py +0 -0
  319. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/settings/utils.py +0 -0
  320. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/skills/loader.py +0 -0
  321. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/skills/registry.py +0 -0
  322. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/skills/types.py +0 -0
  323. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/telemetry/__init__.py +0 -0
  324. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/telemetry/service.py +0 -0
  325. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/telemetry/types.py +0 -0
  326. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/themes/loader.py +0 -0
  327. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/themes/registry.py +0 -0
  328. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/themes/types.py +0 -0
  329. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/tool/__init__.py +0 -0
  330. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/tool/registry.py +0 -0
  331. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/tool/render.py +0 -0
  332. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/tool/types.py +0 -0
  333. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/trust/__init__.py +0 -0
  334. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/trust/manager.py +0 -0
  335. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/trust/types.py +0 -0
  336. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/trust/utils.py +0 -0
  337. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/tui/__init__.py +0 -0
  338. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/tui/ansi_bridge.py +0 -0
  339. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/tui/autocomplete.py +0 -0
  340. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/tui/backend.py +0 -0
  341. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/tui/buffer.py +0 -0
  342. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/tui/component.py +0 -0
  343. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/tui/components/__init__.py +0 -0
  344. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/tui/components/box.py +0 -0
  345. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/tui/components/editor.py +0 -0
  346. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/tui/components/image.py +0 -0
  347. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/tui/components/select_list.py +0 -0
  348. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/tui/components/simple_picker.py +0 -0
  349. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/tui/components/spinner.py +0 -0
  350. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/tui/components/text_input.py +0 -0
  351. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/tui/components/widget_bridge.py +0 -0
  352. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/tui/frame.py +0 -0
  353. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/tui/geometry.py +0 -0
  354. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/tui/input.py +0 -0
  355. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/tui/keybinding_hints.py +0 -0
  356. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/tui/layout.py +0 -0
  357. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/tui/markdown.py +0 -0
  358. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/tui/palette.py +0 -0
  359. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/tui/service.py +0 -0
  360. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/tui/style.py +0 -0
  361. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/tui/terminal.py +0 -0
  362. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/tui/testing.py +0 -0
  363. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/tui/text.py +0 -0
  364. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/tui/theme.py +0 -0
  365. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/tui/widget.py +0 -0
  366. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/tui/widgets/__init__.py +0 -0
  367. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/tui/widgets/barchart.py +0 -0
  368. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/tui/widgets/block.py +0 -0
  369. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/tui/widgets/calendar.py +0 -0
  370. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/tui/widgets/canvas.py +0 -0
  371. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/tui/widgets/chart.py +0 -0
  372. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/tui/widgets/clear.py +0 -0
  373. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/tui/widgets/gauge.py +0 -0
  374. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/tui/widgets/list.py +0 -0
  375. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/tui/widgets/paragraph.py +0 -0
  376. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/tui/widgets/scrollbar.py +0 -0
  377. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/tui/widgets/sparkline.py +0 -0
  378. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/tui/widgets/symbols.py +0 -0
  379. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/tui/widgets/table.py +0 -0
  380. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/tui/widgets/tabs.py +0 -0
  381. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/utils/__init__.py +0 -0
  382. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/utils/format.py +0 -0
  383. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/utils/http_proxy.py +0 -0
  384. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/utils/image_processing.py +0 -0
  385. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau/utils/secrets.py +0 -0
  386. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau_coding_agent.egg-info/SOURCES.txt +0 -0
  387. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau_coding_agent.egg-info/dependency_links.txt +0 -0
  388. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau_coding_agent.egg-info/entry_points.txt +0 -0
  389. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tau_coding_agent.egg-info/top_level.txt +0 -0
  390. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_agent_compaction.py +0 -0
  391. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_agent_hooks.py +0 -0
  392. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_agent_prompt.py +0 -0
  393. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_agent_types.py +0 -0
  394. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_ansi.py +0 -0
  395. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_ansi_bridge_legacy_image.py +0 -0
  396. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_anthropic_tool_history.py +0 -0
  397. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_ask_user_extension.py +0 -0
  398. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_audio_transcription_apis.py +0 -0
  399. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_auth_command.py +0 -0
  400. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_auth_manager.py +0 -0
  401. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_auth_storage.py +0 -0
  402. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_autocomplete_modifiers.py +0 -0
  403. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_branch_navigation.py +0 -0
  404. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_branch_summarization.py +0 -0
  405. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_builtin_tools.py +0 -0
  406. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_builtin_watch.py +0 -0
  407. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_cli_inputs.py +0 -0
  408. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_cmd_copy.py +0 -0
  409. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_command_execution_policy.py +0 -0
  410. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_command_registry.py +0 -0
  411. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_compaction.py +0 -0
  412. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_component_buffer_bridge.py +0 -0
  413. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_diff.py +0 -0
  414. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_editor_protocol.py +0 -0
  415. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_engine_execution.py +0 -0
  416. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_engine_length_and_live_tools.py +0 -0
  417. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_engine_steering.py +0 -0
  418. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_engine_types.py +0 -0
  419. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_escape_behavior.py +0 -0
  420. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_extension_api.py +0 -0
  421. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_extension_lifecycle.py +0 -0
  422. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_footer_model.py +0 -0
  423. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_footer_utils.py +0 -0
  424. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_fuzzy.py +0 -0
  425. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_gemini_generate.py +0 -0
  426. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_google_antigravity.py +0 -0
  427. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_google_vertex.py +0 -0
  428. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_http_proxy.py +0 -0
  429. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_image_processing.py +0 -0
  430. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_inference_api_text_utils.py +0 -0
  431. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_inference_dialect.py +0 -0
  432. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_inference_error_utils.py +0 -0
  433. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_inference_types.py +0 -0
  434. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_inference_utils.py +0 -0
  435. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_keybindings.py +0 -0
  436. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_layout_render_cells.py +0 -0
  437. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_markdown.py +0 -0
  438. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_message_list_frozen.py +0 -0
  439. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_message_types.py +0 -0
  440. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_message_utils.py +0 -0
  441. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_model_availability.py +0 -0
  442. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_model_command.py +0 -0
  443. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_model_registry.py +0 -0
  444. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_model_selector_modal.py +0 -0
  445. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_model_types.py +0 -0
  446. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_oauth_utils.py +0 -0
  447. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_package_resources.py +0 -0
  448. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_packages_utils.py +0 -0
  449. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_peer_extension.py +0 -0
  450. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_pkce.py +0 -0
  451. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_prompts_expand.py +0 -0
  452. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_prompts_loader.py +0 -0
  453. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_prompts_registry.py +0 -0
  454. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_provider_registry.py +0 -0
  455. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_resource_loader.py +0 -0
  456. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_rpc_mode.py +0 -0
  457. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_runtime_sdk.py +0 -0
  458. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_scrollback_raw_writes.py +0 -0
  459. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_scrollback_terminal.py +0 -0
  460. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_secrets.py +0 -0
  461. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_select_list_render_cells.py +0 -0
  462. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_selector_controller.py +0 -0
  463. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_session_manager.py +0 -0
  464. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_session_trust_persist.py +0 -0
  465. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_session_types.py +0 -0
  466. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_session_utils.py +0 -0
  467. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_settings_manager.py +0 -0
  468. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_settings_paths.py +0 -0
  469. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_settings_storage.py +0 -0
  470. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_settings_utils.py +0 -0
  471. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_skills_loader.py +0 -0
  472. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_skills_registry.py +0 -0
  473. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_strip_control_chars.py +0 -0
  474. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_subagent_context.py +0 -0
  475. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_telemetry.py +0 -0
  476. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_text_input.py +0 -0
  477. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_text_input_render_cells.py +0 -0
  478. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_text_llm_invoke.py +0 -0
  479. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_text_llm_model_resolution.py +0 -0
  480. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_theme_loader.py +0 -0
  481. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_themes_registry.py +0 -0
  482. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_thinking_render.py +0 -0
  483. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_tool_registry.py +0 -0
  484. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_tool_render.py +0 -0
  485. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_tree_branch_restore.py +0 -0
  486. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_trust_manager.py +0 -0
  487. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_trust_utils.py +0 -0
  488. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_tui_capabilities.py +0 -0
  489. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_tui_child_rows.py +0 -0
  490. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_tui_input.py +0 -0
  491. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_tui_layout_sizing.py +0 -0
  492. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_tui_public_api.py +0 -0
  493. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_tui_renderer.py +0 -0
  494. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_tui_select_list.py +0 -0
  495. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_tui_theme.py +0 -0
  496. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_tui_utils.py +0 -0
  497. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_ui_context.py +0 -0
  498. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_utils_hashline.py +0 -0
  499. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/tests/test_version_check.py +0 -0
  500. {tau_coding_agent-0.6.8 → tau_coding_agent-0.7.0}/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.8
3
+ Version: 0.7.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
@@ -31,9 +31,9 @@ Requires-Dist: grapheme==0.6.0
31
31
  Requires-Dist: arrow==1.4.0
32
32
  Requires-Dist: kiwisolver==1.5.0
33
33
  Requires-Dist: tiktoken==0.13.0
34
+ Requires-Dist: rapidfuzz==3.14.3
34
35
  Provides-Extra: tools
35
36
  Requires-Dist: ripgrep>=14.0.0; extra == "tools"
36
- Requires-Dist: ast-grep-cli>=0.44.0; extra == "tools"
37
37
  Dynamic: license-file
38
38
 
39
39
  <div align="center">
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "tau-coding-agent"
7
- version = "0.6.8"
7
+ version = "0.7.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"
@@ -35,6 +35,7 @@ dependencies = [
35
35
  "arrow==1.4.0",
36
36
  "kiwisolver==1.5.0",
37
37
  "tiktoken==0.13.0",
38
+ "rapidfuzz==3.14.3",
38
39
  ]
39
40
 
40
41
  [project.scripts]
@@ -74,7 +75,7 @@ tau = [
74
75
  testpaths = ["tests"]
75
76
 
76
77
  [project.optional-dependencies]
77
- tools = ["ripgrep>=14.0.0", "ast-grep-cli>=0.44.0"]
78
+ tools = ["ripgrep>=14.0.0"]
78
79
 
79
80
  [dependency-groups]
80
81
  dev = [
@@ -212,10 +212,23 @@ def _detect_machine() -> str:
212
212
 
213
213
 
214
214
  def _detect_shell() -> str:
215
- """Detect the user's shell from $SHELL, falling back to common shells on PATH."""
215
+ """Detect the user's shell from $SHELL, falling back to common shells on PATH.
216
+
217
+ On Windows, ``$SHELL`` is a POSIX convention and is essentially never set,
218
+ so this used to fall through to up to 4 ``shutil.which()`` calls, each
219
+ scanning every ``PATH`` entry against every ``PATHEXT`` suffix for shells
220
+ (zsh, fish, sh) that don't exist on Windows. We instead resolve the native
221
+ shell directly from environment variables the OS always sets, with no
222
+ PATH scan.
223
+ """
216
224
  shell = os.environ.get("SHELL", "")
217
225
  if shell:
218
226
  return Path(shell).name
227
+ if sys.platform == "win32":
228
+ if os.environ.get("PSModulePath"):
229
+ return "powershell"
230
+ comspec = os.environ.get("COMSPEC", "")
231
+ return Path(comspec).stem if comspec else "cmd"
219
232
  for candidate in ("bash", "zsh", "fish", "sh"):
220
233
  if shutil.which(candidate):
221
234
  return candidate
@@ -74,7 +74,14 @@ def register(tau: ExtensionAPI) -> None:
74
74
  asyncio.ensure_future(_prewarm())
75
75
 
76
76
  @tau.on("session_shutdown")
77
- async def _on_shutdown(_event: Any, _ctx: ExtensionContext) -> None:
77
+ async def _on_session_shutdown(_event: Any, _ctx: ExtensionContext) -> None:
78
+ await manager.stop()
79
+
80
+ @tau.on("runtime_stop")
81
+ async def _on_runtime_stop(_event: Any, _ctx: ExtensionContext) -> None:
82
+ # session_shutdown only fires on session transitions (new/resume/clone),
83
+ # not on actual process exit, so the microVM would otherwise keep running
84
+ # until its own idle_timeout — reap it here too, same as the lsp extension.
78
85
  await manager.stop()
79
86
 
80
87
  async def cmd_sandbox(ctx: ExtensionContext, args: list[str]) -> None:
@@ -5,15 +5,18 @@ import logging
5
5
  import os
6
6
  import sys
7
7
  from pathlib import Path
8
+ from typing import TYPE_CHECKING
8
9
 
9
10
  import click
10
11
 
11
12
  from tau.console.commands.auth import auth
12
13
  from tau.console.commands.packages import install, list_packages, remove
13
14
  from tau.console.commands.update import update
14
- from tau.runtime.service import Runtime
15
15
  from tau.settings.paths import get_app_version
16
16
 
17
+ if TYPE_CHECKING:
18
+ from tau.runtime.service import Runtime
19
+
17
20
  _MODES = ("interactive", "print", "json", "rpc")
18
21
  _OUTPUT_FORMATS = ("text", "json")
19
22
 
@@ -409,7 +409,11 @@ class ExtensionLoader:
409
409
  """Install an extension's declared dependencies, once per dependency set.
410
410
 
411
411
  Runs synchronously (called via ``asyncio.to_thread``) so the blocking
412
- subprocess install doesn't stall the event loop.
412
+ subprocess install doesn't stall the event loop. A failed install is
413
+ cached too, not just successes — otherwise a dependency that can never
414
+ build on this interpreter (e.g. no wheel for a free-threaded Python
415
+ build, missing compiler) retries the full failing subprocess on every
416
+ single startup instead of failing fast after the first attempt.
413
417
  """
414
418
  from tau.packages.manager import PackageManager
415
419
 
@@ -424,7 +428,7 @@ class ExtensionLoader:
424
428
 
425
429
  digest = hashlib.sha256("\n".join(sorted(deps)).encode("utf-8")).hexdigest()
426
430
  cache_file = venv_dir / ".tau_ext_deps.json"
427
- cache: dict[str, str] = {}
431
+ cache: dict[str, Any] = {}
428
432
  if cache_file.is_file():
429
433
  try:
430
434
  cache = json.loads(cache_file.read_text(encoding="utf-8"))
@@ -433,12 +437,29 @@ class ExtensionLoader:
433
437
  cache = {}
434
438
 
435
439
  key = str(subdir.resolve())
436
- if cache.get(key) != digest:
437
- _log.info("Installing dependencies for extension %r: %s", subdir.name, ", ".join(deps))
440
+ entry = cache.get(key)
441
+ # Older cache files stored the digest directly as a bare string (success-only).
442
+ cached_digest = entry.get("digest") if isinstance(entry, dict) else entry
443
+ if cached_digest == digest:
444
+ if isinstance(entry, dict) and not entry.get("ok", True):
445
+ raise RuntimeError(
446
+ f"Dependencies for extension {subdir.name!r} previously failed to "
447
+ f"install: {entry.get('error', 'unknown error')}"
448
+ )
449
+ add_site_packages_path(pkg_mgr.site_packages())
450
+ return
451
+
452
+ _log.info("Installing dependencies for extension %r: %s", subdir.name, ", ".join(deps))
453
+ try:
438
454
  pkg_mgr.install_requirements(deps)
439
- cache[key] = digest
455
+ except Exception as exc:
456
+ cache[key] = {"digest": digest, "ok": False, "error": str(exc)}
440
457
  cache_file.parent.mkdir(parents=True, exist_ok=True)
441
458
  cache_file.write_text(json.dumps(cache, indent=2), encoding="utf-8")
459
+ raise
460
+ cache[key] = {"digest": digest, "ok": True}
461
+ cache_file.parent.mkdir(parents=True, exist_ok=True)
462
+ cache_file.write_text(json.dumps(cache, indent=2), encoding="utf-8")
442
463
 
443
464
  add_site_packages_path(pkg_mgr.site_packages())
444
465
 
@@ -308,11 +308,9 @@ class AnthropicClaudeCodeOAuthProvider(OAuthProvider):
308
308
  pass
309
309
 
310
310
  @property
311
- def api(self):
312
- """Return the API class that handles requests with this provider's tokens."""
313
- from tau.inference.api.text.anthropic_claude_code import AnthropicClaudeCodeAPI
314
-
315
- return AnthropicClaudeCodeAPI
311
+ def api(self) -> str:
312
+ """Registry key for the API class; resolved (and the SDK imported) lazily."""
313
+ return "anthropic_claude_code"
316
314
 
317
315
  async def validate(
318
316
  self, credential: OAuthCredential, signal: AbortSignal | None = None
@@ -353,8 +353,6 @@ class GitHubCopilotOAuthProvider(OAuthProvider):
353
353
  return not (signal and signal.is_set())
354
354
 
355
355
  @property
356
- def api(self):
357
- """Return the API class that handles requests with this provider's tokens."""
358
- from tau.inference.api.text.github_copilot_chat import GitHubCopilotChatAPI
359
-
360
- return GitHubCopilotChatAPI
356
+ def api(self) -> str:
357
+ """Registry key for the API class; resolved (and the SDK imported) lazily."""
358
+ return "github_copilot_chat"
@@ -277,11 +277,9 @@ class GoogleAntigravityOAuthProvider(OAuthProvider):
277
277
  pass
278
278
 
279
279
  @property
280
- def api(self):
281
- """Return the API class that handles requests with this provider's tokens."""
282
- from tau.inference.api.text.google_antigravity import GoogleAntigravityAPI
283
-
284
- return GoogleAntigravityAPI
280
+ def api(self) -> str:
281
+ """Registry key for the API class; resolved (and the SDK imported) lazily."""
282
+ return "google_antigravity"
285
283
 
286
284
  async def validate(
287
285
  self, credential: OAuthCredential, signal: AbortSignal | None = None
@@ -326,11 +326,9 @@ class OpenAICodexOAuthProvider(OAuthProvider):
326
326
  await asyncio.to_thread(_revoke_token_sync, credential.refresh)
327
327
 
328
328
  @property
329
- def api(self):
330
- """Return the API class that handles requests with this provider's tokens."""
331
- from tau.inference.api.text.openai_codex_responses import OpenAICodexResponsesAPI
332
-
333
- return OpenAICodexResponsesAPI
329
+ def api(self) -> str:
330
+ """Registry key for the API class; resolved (and the SDK imported) lazily."""
331
+ return "openai_codex_responses"
334
332
 
335
333
  async def validate(
336
334
  self, credential: OAuthCredential, signal: AbortSignal | None = None
@@ -269,11 +269,9 @@ class XAIGrokOAuthProvider(OAuthProvider):
269
269
  await asyncio.to_thread(_revoke_token_sync, credential.refresh)
270
270
 
271
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
272
+ def api(self) -> str:
273
+ """Registry key for the API class; resolved (and the SDK imported) lazily."""
274
+ return "xai"
277
275
 
278
276
  async def validate(
279
277
  self, credential: OAuthCredential, signal: AbortSignal | None = None
@@ -32,8 +32,10 @@ class OAuthProvider(ABC):
32
32
 
33
33
  @property
34
34
  @abstractmethod
35
- def api(self) -> type[BaseLLMAPI]:
36
- """Return the LLM API class for this provider."""
35
+ def api(self) -> str | type[BaseLLMAPI]:
36
+ """Return the LLM API class for this provider, or a lazy 'registry-key' /
37
+ 'module:ClassName' reference so the provider SDK isn't imported until
38
+ the API is actually resolved (first request)."""
37
39
  ...
38
40
 
39
41
  @abstractmethod
@@ -1,6 +1,5 @@
1
1
  from __future__ import annotations
2
2
 
3
- import difflib
4
3
  import re
5
4
  import subprocess
6
5
  import unicodedata
@@ -633,24 +632,34 @@ def _is_diff(text: str) -> bool:
633
632
 
634
633
 
635
634
  def _word_diff(old: str, new: str, inverse: Callable[[str], str]) -> tuple[str, str]:
636
- """Highlight changed words with inverse video."""
635
+ """Highlight changed words with inverse video.
636
+
637
+ Uses rapidfuzz's C++ Indel opcodes instead of difflib.SequenceMatcher —
638
+ difflib has pathological worst-case slowness on some inputs, and
639
+ rapidfuzz is meaningfully faster on long lines with the same
640
+ equal/insert/delete opcode semantics (Indel never emits "replace"; a
641
+ substitution surfaces as an adjacent delete+insert pair instead, which
642
+ renders identically here since each tag only ever touches one side).
643
+ """
644
+ from rapidfuzz.distance import Indel
645
+
637
646
  old_words = re.split(r"(\s+)", old)
638
647
  new_words = re.split(r"(\s+)", new)
639
- sm = difflib.SequenceMatcher(None, old_words, new_words, autojunk=False)
648
+ opcodes = Indel.opcodes(old_words, new_words)
640
649
 
641
650
  old_out, new_out = [], []
642
- for tag, i1, i2, j1, j2 in sm.get_opcodes():
643
- old_chunk = "".join(old_words[i1:i2])
644
- new_chunk = "".join(new_words[j1:j2])
645
- if tag == "equal":
651
+ for op in opcodes:
652
+ old_chunk = "".join(old_words[op.src_start : op.src_end])
653
+ new_chunk = "".join(new_words[op.dest_start : op.dest_end])
654
+ if op.tag == "equal":
646
655
  old_out.append(old_chunk)
647
656
  new_out.append(new_chunk)
648
- elif tag == "replace":
657
+ elif op.tag == "replace":
649
658
  old_out.append(inverse(old_chunk) if old_chunk.strip() else old_chunk)
650
659
  new_out.append(inverse(new_chunk) if new_chunk.strip() else new_chunk)
651
- elif tag == "delete":
660
+ elif op.tag == "delete":
652
661
  old_out.append(inverse(old_chunk) if old_chunk.strip() else old_chunk)
653
- elif tag == "insert":
662
+ elif op.tag == "insert":
654
663
  new_out.append(inverse(new_chunk) if new_chunk.strip() else new_chunk)
655
664
 
656
665
  return "".join(old_out), "".join(new_out)
@@ -1,5 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
+ import asyncio
3
4
  import contextlib
4
5
 
5
6
  _TIMEOUT = 5.0
@@ -42,19 +43,31 @@ def _is_newer(latest: str, current: str) -> bool:
42
43
  return False
43
44
 
44
45
 
46
+ def _fetch_latest_version_sync() -> str:
47
+ """Blocking GET against PyPI; run off the event loop (see ``check_for_new_version``)."""
48
+ import httpx
49
+
50
+ with httpx.Client(timeout=_TIMEOUT) as client:
51
+ resp = client.get(_pypi_url(), headers={"Accept": "application/json"})
52
+ resp.raise_for_status()
53
+ data = resp.json()
54
+ return data.get("info", {}).get("version", "")
55
+
56
+
45
57
  async def check_for_new_version(current_version: str) -> str | None:
46
- """Return the latest PyPI version string if newer than current, else None."""
58
+ """Return the latest PyPI version string if newer than current, else None.
59
+
60
+ Runs on a worker thread: building an httpx client constructs an SSL
61
+ context, which on Windows enumerates the system certificate store and can
62
+ take several hundred ms of synchronous CPU work. Doing that inline on the
63
+ event loop — even though this whole check is itself a backgrounded,
64
+ unawaited task — would still stall the just-launched TUI's render loop for
65
+ that duration, since both share the same thread.
66
+ """
47
67
  try:
48
- import httpx
49
-
50
- async with httpx.AsyncClient(timeout=_TIMEOUT) as client:
51
- resp = await client.get(_pypi_url(), headers={"Accept": "application/json"})
52
- if not resp.is_success:
53
- return None
54
- data = resp.json()
55
- latest = data.get("info", {}).get("version", "")
56
- if latest and _is_newer(latest, current_version):
57
- return latest
68
+ latest = await asyncio.to_thread(_fetch_latest_version_sync)
69
+ if latest and _is_newer(latest, current_version):
70
+ return latest
58
71
  except Exception:
59
72
  return None
60
73
  return None
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tau-coding-agent
3
- Version: 0.6.8
3
+ Version: 0.7.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
@@ -31,9 +31,9 @@ Requires-Dist: grapheme==0.6.0
31
31
  Requires-Dist: arrow==1.4.0
32
32
  Requires-Dist: kiwisolver==1.5.0
33
33
  Requires-Dist: tiktoken==0.13.0
34
+ Requires-Dist: rapidfuzz==3.14.3
34
35
  Provides-Extra: tools
35
36
  Requires-Dist: ripgrep>=14.0.0; extra == "tools"
36
- Requires-Dist: ast-grep-cli>=0.44.0; extra == "tools"
37
37
  Dynamic: license-file
38
38
 
39
39
  <div align="center">
@@ -24,7 +24,7 @@ grapheme==0.6.0
24
24
  arrow==1.4.0
25
25
  kiwisolver==1.5.0
26
26
  tiktoken==0.13.0
27
+ rapidfuzz==3.14.3
27
28
 
28
29
  [tools]
29
30
  ripgrep>=14.0.0
30
- ast-grep-cli>=0.44.0