tau-coding-agent 0.6.0__tar.gz → 0.6.2__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.
- tau_coding_agent-0.6.2/PKG-INFO +213 -0
- tau_coding_agent-0.6.2/README.md +175 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/docs/installation.md +5 -2
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/docs/quickstart.md +5 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/docs/tools.md +4 -2
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/pyproject.toml +2 -1
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/agent/prompt/builder.py +12 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/agent/service.py +29 -9
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/auth/storage.py +4 -2
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/builtins/extensions/ask_user/component.py +178 -69
- tau_coding_agent-0.6.2/tau/builtins/extensions/ask_user/schema.py +142 -0
- tau_coding_agent-0.6.2/tau/builtins/extensions/ask_user/tool.py +181 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/builtins/extensions/footer/__init__.py +11 -0
- tau_coding_agent-0.6.2/tau/builtins/extensions/sandbox/__init__.py +109 -0
- tau_coding_agent-0.6.2/tau/builtins/extensions/sandbox/manager.py +138 -0
- tau_coding_agent-0.6.2/tau/builtins/extensions/sandbox/manifest.json +69 -0
- tau_coding_agent-0.6.2/tau/builtins/extensions/sandbox/sandbox_tool.py +232 -0
- tau_coding_agent-0.6.2/tau/builtins/extensions/subagent/__init__.py +28 -0
- tau_coding_agent-0.6.2/tau/builtins/extensions/subagent/agents/context-builder.md +47 -0
- tau_coding_agent-0.6.2/tau/builtins/extensions/subagent/agents/delegate.md +9 -0
- tau_coding_agent-0.6.2/tau/builtins/extensions/subagent/agents/oracle.md +68 -0
- tau_coding_agent-0.6.2/tau/builtins/extensions/subagent/agents/planner.md +49 -0
- tau_coding_agent-0.6.2/tau/builtins/extensions/subagent/agents/researcher.md +48 -0
- tau_coding_agent-0.6.2/tau/builtins/extensions/subagent/agents/reviewer.md +72 -0
- tau_coding_agent-0.6.2/tau/builtins/extensions/subagent/agents/scout.md +41 -0
- tau_coding_agent-0.6.2/tau/builtins/extensions/subagent/agents/worker.md +36 -0
- tau_coding_agent-0.6.2/tau/builtins/extensions/subagent/agents.py +118 -0
- tau_coding_agent-0.6.2/tau/builtins/extensions/subagent/manifest.json +18 -0
- tau_coding_agent-0.6.2/tau/builtins/extensions/subagent/subagent_schema.py +75 -0
- tau_coding_agent-0.6.2/tau/builtins/extensions/subagent/subagent_tool.py +813 -0
- tau_coding_agent-0.6.2/tau/builtins/extensions/todo/__init__.py +165 -0
- tau_coding_agent-0.6.2/tau/builtins/extensions/todo/manifest.json +18 -0
- tau_coding_agent-0.6.2/tau/builtins/extensions/todo/todo_schema.py +69 -0
- tau_coding_agent-0.6.2/tau/builtins/extensions/todo/todo_tool.py +425 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/builtins/extensions/web/engines/__init__.py +2 -1
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/builtins/extensions/web/engines/base.py +25 -2
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/builtins/extensions/web/engines/ddgs_engine.py +33 -4
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/builtins/extensions/web/engines/exa_engine.py +27 -2
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/builtins/extensions/web/engines/jina_engine.py +11 -2
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/builtins/extensions/web/engines/tavily_engine.py +11 -2
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/builtins/extensions/web/tools/fetch.py +9 -10
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/builtins/extensions/web/tools/search.py +39 -5
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/builtins/skills/code-review/SKILL.md +1 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/builtins/skills/debug/SKILL.md +1 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/builtins/skills/git-commit/SKILL.md +1 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/builtins/tools/edit.py +133 -18
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/builtins/tools/glob.py +4 -1
- tau_coding_agent-0.6.2/tau/builtins/tools/grep.py +176 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/builtins/tools/read.py +36 -7
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/builtins/tools/terminal.py +8 -3
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/builtins/tools/utils.py +27 -8
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/builtins/tools/write.py +6 -3
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/console/cli.py +17 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/extensions/loader.py +7 -1
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/hooks/service.py +31 -4
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/inference/api/registry.py +14 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/inference/api/text/service.py +10 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/inference/utils.py +1 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/modes/interactive/agent_hooks.py +1 -1
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/modes/interactive/app.py +13 -3
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/modes/interactive/commands/context.py +1 -1
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/modes/interactive/commands/extensions.py +21 -2
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/modes/interactive/commands/session.py +6 -26
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/modes/interactive/components/config_selector.py +1 -1
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/modes/interactive/components/extension_selector.py +1 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/modes/interactive/components/layout.py +26 -3
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/modes/interactive/components/message_list.py +129 -27
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/modes/interactive/components/model_selector.py +4 -11
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/modes/interactive/components/oauth_selector.py +1 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/modes/interactive/components/selector_controller.py +1 -1
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/modes/interactive/components/session_selector.py +6 -9
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/modes/interactive/components/settings_selector.py +3 -3
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/modes/interactive/components/theme_selector.py +1 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/modes/interactive/components/thinking_selector.py +1 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/modes/interactive/components/voice_selector.py +1 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/modes/interactive/input_handler.py +1 -1
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/modes/interactive/ui_context.py +42 -3
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/packages/manager.py +11 -3
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/runtime/service.py +23 -7
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/runtime/types.py +29 -16
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/session/compaction.py +133 -23
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/session/manager.py +8 -6
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/session/utils.py +28 -11
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/themes/loader.py +1 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/tui/__init__.py +5 -5
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/tui/buffer.py +1 -1
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/tui/components/simple_picker.py +2 -1
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/tui/components/spinner.py +1 -1
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/tui/components/text_input.py +1 -1
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/tui/frame.py +2 -2
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/tui/markdown.py +128 -33
- tau_coding_agent-0.6.0/tau/tui/tui.py → tau_coding_agent-0.6.2/tau/tui/service.py +38 -4
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/tui/theme.py +7 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/tui/widgets/clear.py +1 -1
- tau_coding_agent-0.6.2/tau/utils/format.py +40 -0
- tau_coding_agent-0.6.2/tau_coding_agent.egg-info/PKG-INFO +213 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau_coding_agent.egg-info/SOURCES.txt +25 -2
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau_coding_agent.egg-info/requires.txt +1 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_agent_compaction.py +41 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_ask_user_extension.py +1 -1
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_builtin_tools.py +21 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_compaction.py +61 -14
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_extension_lifecycle.py +1 -1
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_gemini_generate.py +2 -1
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_inference_error_utils.py +6 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_layout_render_cells.py +1 -1
- tau_coding_agent-0.6.2/tests/test_mcp_extension.py +183 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_session_manager.py +21 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_session_trust_persist.py +50 -0
- tau_coding_agent-0.6.2/tests/test_subagent_context.py +288 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_tui_child_rows.py +2 -2
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_tui_renderer.py +2 -2
- tau_coding_agent-0.6.0/PKG-INFO +0 -191
- tau_coding_agent-0.6.0/README.md +0 -154
- tau_coding_agent-0.6.0/tau/builtins/extensions/ask_user/schema.py +0 -41
- tau_coding_agent-0.6.0/tau/builtins/extensions/ask_user/tool.py +0 -129
- tau_coding_agent-0.6.0/tau/builtins/tools/grep.py +0 -298
- tau_coding_agent-0.6.0/tau_coding_agent.egg-info/PKG-INFO +0 -191
- tau_coding_agent-0.6.0/tests/test_subagents_extension.py +0 -271
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/LICENSE +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/MANIFEST.in +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/docs/architecture.md +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/docs/auth.md +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/docs/cli-reference.md +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/docs/creating-tools.md +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/docs/development.md +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/docs/docs.json +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/docs/engine.md +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/docs/extension-settings.md +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/docs/extensions.md +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/docs/http-proxy.md +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/docs/index.md +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/docs/inference-providers.md +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/docs/inference.md +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/docs/keybindings.md +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/docs/messages.md +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/docs/project-context.md +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/docs/project-structure.md +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/docs/prompts.md +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/docs/python-api.md +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/docs/sessions.md +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/docs/settings.md +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/docs/skills.md +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/docs/themes.md +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/docs/tui.md +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/docs/usage.md +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/setup.cfg +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/__init__.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/agent/__init__.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/agent/prompt/__init__.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/agent/prompt/types.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/agent/types.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/auth/manager.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/auth/types.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/builtins/__init__.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/builtins/commands/__init__.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/builtins/commands/clear.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/builtins/commands/compact.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/builtins/commands/reload.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/builtins/commands/session.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/builtins/extensions/ask_user/__init__.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/builtins/extensions/ask_user/manifest.json +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/builtins/extensions/btw/__init__.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/builtins/extensions/footer/git.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/builtins/extensions/footer/model.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/builtins/extensions/footer/utils.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/builtins/extensions/header/__init__.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/builtins/extensions/watch/__init__.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/builtins/extensions/web/__init__.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/builtins/extensions/web/manifest.json +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/builtins/extensions/web/tools/__init__.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/builtins/models/__init__.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/builtins/models/audio.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/builtins/models/image.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/builtins/models/text.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/builtins/models/video.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/builtins/prompts/commit.md +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/builtins/prompts/docs.md +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/builtins/prompts/explain.md +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/builtins/prompts/fix.md +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/builtins/prompts/refactor.md +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/builtins/prompts/review.md +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/builtins/prompts/test.md +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/builtins/providers/__init__.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/builtins/providers/audio.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/builtins/providers/image.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/builtins/providers/text.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/builtins/providers/video.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/builtins/skills/skill-creator/LICENSE.txt +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/builtins/skills/skill-creator/SKILL.md +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/builtins/themes/ayu-dark.yaml +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/builtins/themes/catppuccin.yaml +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/builtins/themes/dark.yaml +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/builtins/themes/dracula.yaml +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/builtins/themes/everforest.yaml +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/builtins/themes/gruvbox.yaml +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/builtins/themes/horizon.yaml +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/builtins/themes/kanagawa.yaml +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/builtins/themes/light.yaml +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/builtins/themes/material-ocean.yaml +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/builtins/themes/monokai.yaml +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/builtins/themes/night-owl.yaml +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/builtins/themes/nord.yaml +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/builtins/themes/one-dark.yaml +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/builtins/themes/rose-pine.yaml +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/builtins/themes/solarized-dark.yaml +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/builtins/themes/tokyo-night.yaml +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/builtins/tools/__init__.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/builtins/tools/ls.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/commands/__init__.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/commands/registry.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/commands/types.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/console/__init__.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/console/commands/__init__.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/console/commands/auth.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/console/commands/packages.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/console/commands/update.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/core/__init__.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/core/registry.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/engine/__init__.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/engine/service.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/engine/types.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/extensions/__init__.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/extensions/api.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/extensions/context.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/extensions/runtime.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/extensions/settings.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/hooks/__init__.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/hooks/engine.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/hooks/inference.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/hooks/runtime.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/hooks/session.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/hooks/tui.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/hooks/types.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/inference/__init__.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/inference/api/__init__.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/inference/api/audio/__init__.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/inference/api/audio/base.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/inference/api/audio/builtins.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/inference/api/audio/elevenlabs_audio.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/inference/api/audio/gemini_audio.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/inference/api/audio/openai_audio.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/inference/api/audio/registry.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/inference/api/audio/sarvam_audio.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/inference/api/audio/service.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/inference/api/audio/utils.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/inference/api/availability.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/inference/api/image/__init__.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/inference/api/image/base.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/inference/api/image/builtins.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/inference/api/image/gemini_image.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/inference/api/image/openai_image.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/inference/api/image/openrouter.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/inference/api/image/registry.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/inference/api/image/service.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/inference/api/text/__init__.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/inference/api/text/anthropic_claude_code.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/inference/api/text/anthropic_messages.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/inference/api/text/anthropic_vertex.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/inference/api/text/base.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/inference/api/text/builtins.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/inference/api/text/dialect.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/inference/api/text/gemini_generate.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/inference/api/text/github_copilot_chat.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/inference/api/text/google_antigravity.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/inference/api/text/google_vertex.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/inference/api/text/mistral_chat.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/inference/api/text/ollama_chat.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/inference/api/text/openai_codex_responses.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/inference/api/text/openai_completions.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/inference/api/text/openai_responses.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/inference/api/text/openai_vertex.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/inference/api/text/registry.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/inference/api/text/types.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/inference/api/text/utils.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/inference/api/video/__init__.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/inference/api/video/base.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/inference/api/video/builtins.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/inference/api/video/fal_video.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/inference/api/video/openrouter_video.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/inference/api/video/registry.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/inference/api/video/service.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/inference/api/video/zai_video.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/inference/model/__init__.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/inference/model/registry.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/inference/model/types.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/inference/provider/__init__.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/inference/provider/oauth/__init__.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/inference/provider/oauth/anthropic_claude_code.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/inference/provider/oauth/github_copilot.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/inference/provider/oauth/google_antigravity.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/inference/provider/oauth/openai_codex.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/inference/provider/oauth/pkce.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/inference/provider/oauth/types.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/inference/provider/oauth/utils.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/inference/provider/registry.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/inference/provider/types.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/inference/types.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/message/__init__.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/message/types.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/message/utils.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/modes/__init__.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/modes/interactive/__init__.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/modes/interactive/commands/__init__.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/modes/interactive/commands/appearance.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/modes/interactive/commands/auth.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/modes/interactive/commands/misc.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/modes/interactive/commands/model.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/modes/interactive/components/__init__.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/modes/interactive/components/command_palette.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/modes/interactive/components/file_picker.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/modes/interactive/components/overlays.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/modes/interactive/components/tree_selector.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/modes/interactive/components/trust_screen.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/modes/print/__init__.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/modes/rpc/__init__.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/modes/rpc/mode.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/modes/rpc/types.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/packages/__init__.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/packages/types.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/packages/utils.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/prompts/expand.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/prompts/loader.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/prompts/registry.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/prompts/types.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/resources/__init__.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/resources/loader.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/resources/types.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/runtime/dependencies.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/session/branch_summarization.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/session/types.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/settings/manager.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/settings/paths.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/settings/storage.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/settings/types.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/settings/utils.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/skills/loader.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/skills/registry.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/skills/types.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/telemetry/__init__.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/telemetry/service.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/telemetry/types.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/themes/registry.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/themes/types.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/tool/__init__.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/tool/registry.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/tool/render.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/tool/types.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/trust/__init__.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/trust/manager.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/trust/types.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/trust/utils.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/tui/ansi_bridge.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/tui/autocomplete.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/tui/backend.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/tui/component.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/tui/components/__init__.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/tui/components/box.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/tui/components/editor.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/tui/components/image.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/tui/components/select_list.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/tui/components/widget_bridge.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/tui/geometry.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/tui/input.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/tui/keybinding_hints.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/tui/layout.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/tui/palette.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/tui/style.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/tui/terminal.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/tui/testing.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/tui/text.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/tui/utils.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/tui/widget.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/tui/widgets/__init__.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/tui/widgets/barchart.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/tui/widgets/block.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/tui/widgets/calendar.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/tui/widgets/canvas.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/tui/widgets/chart.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/tui/widgets/gauge.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/tui/widgets/list.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/tui/widgets/paragraph.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/tui/widgets/scrollbar.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/tui/widgets/sparkline.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/tui/widgets/symbols.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/tui/widgets/table.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/tui/widgets/tabs.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/utils/__init__.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/utils/http_proxy.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/utils/image_processing.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/utils/secrets.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau/utils/version_check.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau_coding_agent.egg-info/dependency_links.txt +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau_coding_agent.egg-info/entry_points.txt +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tau_coding_agent.egg-info/top_level.txt +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_agent_hooks.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_agent_prompt.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_agent_types.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_ansi.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_ansi_bridge_legacy_image.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_audio_transcription_apis.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_auth_command.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_auth_manager.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_auth_storage.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_autocomplete_modifiers.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_branch_navigation.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_branch_summarization.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_builtin_watch.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_cli_inputs.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_command_execution_policy.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_command_registry.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_component_buffer_bridge.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_diff.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_editor_protocol.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_engine_execution.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_engine_steering.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_engine_types.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_escape_behavior.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_extension_api.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_footer_model.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_footer_utils.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_fuzzy.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_http_proxy.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_image_processing.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_inference_api_text_utils.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_inference_dialect.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_inference_types.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_inference_utils.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_keybindings.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_markdown.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_message_list_frozen.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_message_types.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_message_utils.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_model_availability.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_model_command.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_model_registry.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_model_selector_modal.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_model_types.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_oauth_utils.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_package_resources.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_packages_utils.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_peer_extension.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_pkce.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_prompts_expand.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_prompts_loader.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_prompts_registry.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_provider_registry.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_resource_loader.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_rpc_mode.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_runtime_sdk.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_scrollback_raw_writes.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_scrollback_terminal.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_secrets.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_select_list_render_cells.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_selector_controller.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_session_types.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_session_utils.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_settings_manager.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_settings_paths.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_settings_storage.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_settings_utils.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_skills_loader.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_skills_registry.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_telemetry.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_text_input.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_text_input_render_cells.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_text_llm_invoke.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_theme_loader.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_themes_registry.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_thinking_render.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_tool_registry.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_tool_render.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_trust_manager.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_trust_utils.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_tui_capabilities.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_tui_input.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_tui_layout_sizing.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_tui_public_api.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_tui_select_list.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_tui_theme.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_tui_utils.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_ui_context.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_utils_hashline.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_version_check.py +0 -0
- {tau_coding_agent-0.6.0 → tau_coding_agent-0.6.2}/tests/test_voice_selector.py +0 -0
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: tau-coding-agent
|
|
3
|
+
Version: 0.6.2
|
|
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
|
+
Requires-Python: >=3.12
|
|
6
|
+
Description-Content-Type: text/markdown
|
|
7
|
+
License-File: LICENSE
|
|
8
|
+
Requires-Dist: anthropic==0.109.1
|
|
9
|
+
Requires-Dist: certifi==2026.5.20
|
|
10
|
+
Requires-Dist: click==8.4.1
|
|
11
|
+
Requires-Dist: filelock==3.29.3
|
|
12
|
+
Requires-Dist: google-genai==2.8.0
|
|
13
|
+
Requires-Dist: httpx==0.28.1
|
|
14
|
+
Requires-Dist: mistralai==2.4.9
|
|
15
|
+
Requires-Dist: ollama==0.6.2
|
|
16
|
+
Requires-Dist: openai==2.41.1
|
|
17
|
+
Requires-Dist: packaging==26.2
|
|
18
|
+
Requires-Dist: pillow==12.2.0
|
|
19
|
+
Requires-Dist: pydantic==2.13.4
|
|
20
|
+
Requires-Dist: python-dotenv==1.2.2
|
|
21
|
+
Requires-Dist: uuid7==0.1.0
|
|
22
|
+
Requires-Dist: websockets==16.0
|
|
23
|
+
Requires-Dist: mistletoe==1.5.1
|
|
24
|
+
Requires-Dist: pyyaml==6.0.2
|
|
25
|
+
Requires-Dist: pygments==2.20.0
|
|
26
|
+
Requires-Dist: pathspec==1.1.1
|
|
27
|
+
Requires-Dist: posthog==7.21.3
|
|
28
|
+
Requires-Dist: pylatexenc==2.10
|
|
29
|
+
Requires-Dist: gitpython==3.1.50
|
|
30
|
+
Requires-Dist: grapheme==0.6.0
|
|
31
|
+
Requires-Dist: arrow==1.4.0
|
|
32
|
+
Requires-Dist: kiwisolver==1.5.0
|
|
33
|
+
Requires-Dist: tiktoken==0.13.0
|
|
34
|
+
Provides-Extra: tools
|
|
35
|
+
Requires-Dist: ripgrep>=14.0.0; extra == "tools"
|
|
36
|
+
Requires-Dist: ast-grep-cli>=0.44.0; extra == "tools"
|
|
37
|
+
Dynamic: license-file
|
|
38
|
+
|
|
39
|
+
# Tau (τ)
|
|
40
|
+
|
|
41
|
+
Tau is a Python agent framework and terminal coding assistant. It combines an
|
|
42
|
+
interactive terminal UI, multiple model providers, persistent sessions, tool
|
|
43
|
+
execution, and an extension system in one package.
|
|
44
|
+
|
|
45
|
+
<p align="center">
|
|
46
|
+
<img src="assets/tui.jpeg" alt="Tau interactive terminal interface" width="700">
|
|
47
|
+
</p>
|
|
48
|
+
|
|
49
|
+
## Quick start
|
|
50
|
+
|
|
51
|
+
Tau requires Python 3.12 or later.
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
pip install tau-coding-agent
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Set a provider API key and start Tau:
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
export ANTHROPIC_API_KEY=sk-ant-...
|
|
61
|
+
tau
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
Google AI Studio works through the `google` provider:
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
export GOOGLE_API_KEY=...
|
|
68
|
+
tau --model google/gemini-2.5-flash
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
You can also run `/login` inside Tau to save provider credentials.
|
|
72
|
+
|
|
73
|
+
Then ask Tau to work in the current directory:
|
|
74
|
+
|
|
75
|
+
```text
|
|
76
|
+
Explain this repository, run its tests, and fix any failures.
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
## Common workflows
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
tau # Start an interactive session
|
|
83
|
+
tau --resume # Resume the latest session
|
|
84
|
+
tau --model claude-sonnet-4-6 # Start with a specific model
|
|
85
|
+
tau --print "Summarize this repository" # Run once and print the result
|
|
86
|
+
tau --mode json "Summarize this repo" # Emit structured JSON events
|
|
87
|
+
tau --mode rpc # Start JSON-RPC mode for IDE clients
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
Inside an interactive session:
|
|
91
|
+
|
|
92
|
+
```text
|
|
93
|
+
/model Choose a model
|
|
94
|
+
/resume Resume another session
|
|
95
|
+
/tree Navigate session branches
|
|
96
|
+
/compact Compact a long conversation
|
|
97
|
+
/theme Change the terminal theme
|
|
98
|
+
/login Save provider credentials
|
|
99
|
+
/help Show commands and shortcuts
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
See the [CLI reference](docs/cli-reference.md) for every option and command.
|
|
103
|
+
|
|
104
|
+
## What Tau provides
|
|
105
|
+
|
|
106
|
+
- **Interactive terminal UI** with multiline editing, searchable pickers,
|
|
107
|
+
syntax highlighting, Markdown, and terminal-readable LaTeX math.
|
|
108
|
+
- **Multiple model providers**, including Anthropic, OpenAI, Google Gemini,
|
|
109
|
+
Mistral, Ollama, Groq, xAI, Bedrock, OpenRouter, and others.
|
|
110
|
+
- **Persistent session trees** with resume, fork, clone, branch navigation,
|
|
111
|
+
summarization, and automatic context compaction.
|
|
112
|
+
- **Built-in tools** for terminal commands, file operations, globbing, and
|
|
113
|
+
search. Long-running terminal commands stream into one persistent output
|
|
114
|
+
block.
|
|
115
|
+
- **Media support** for images, audio, video, and text files through file
|
|
116
|
+
references, clipboard input, and the Python API.
|
|
117
|
+
- **Speech APIs** for text-to-speech and speech-to-text, including word or
|
|
118
|
+
segment timestamps when supported by the selected provider.
|
|
119
|
+
- **Extensibility** through custom tools, slash commands, hooks, themes,
|
|
120
|
+
skills, prompts, and in-memory Python extensions.
|
|
121
|
+
- **Embedding and integration** through the Python API, JSON event mode, and
|
|
122
|
+
bidirectional JSON-RPC.
|
|
123
|
+
|
|
124
|
+
## Referencing files
|
|
125
|
+
|
|
126
|
+
Type `@` in the interactive editor to search for a project file:
|
|
127
|
+
|
|
128
|
+
```text
|
|
129
|
+
Review @src/service.py and add tests for its error handling.
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
For one-shot execution, attach a file explicitly:
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
tau --print --prompt "Explain this file" --file src/service.py
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
Tau also discovers project instructions from `AGENTS.md` and `CLAUDE.md`.
|
|
139
|
+
See [Project Context Files](docs/project-context.md) for trust and discovery
|
|
140
|
+
behavior.
|
|
141
|
+
|
|
142
|
+
## Authentication and configuration
|
|
143
|
+
|
|
144
|
+
Tau resolves provider credentials in this order:
|
|
145
|
+
|
|
146
|
+
1. A programmatic runtime override
|
|
147
|
+
2. A credential saved in `~/.tau/auth.json` (including keys saved by `/login`)
|
|
148
|
+
3. A provider environment variable such as `ANTHROPIC_API_KEY`,
|
|
149
|
+
`OPENAI_API_KEY`, and `GOOGLE_API_KEY`
|
|
150
|
+
|
|
151
|
+
Settings are merged in this order:
|
|
152
|
+
|
|
153
|
+
1. Built-in defaults
|
|
154
|
+
2. `~/.tau/settings.json`
|
|
155
|
+
3. `.tau/settings.json`
|
|
156
|
+
4. Environment variables
|
|
157
|
+
5. Command-line options
|
|
158
|
+
|
|
159
|
+
See [Authentication](docs/auth.md), [Installation](docs/installation.md), and
|
|
160
|
+
[Inference Providers](docs/inference-providers.md) for provider-specific
|
|
161
|
+
setup.
|
|
162
|
+
|
|
163
|
+
## Documentation
|
|
164
|
+
|
|
165
|
+
- [Quickstart](docs/quickstart.md) — First session in five minutes
|
|
166
|
+
- [Usage](docs/usage.md) — Interactive workflows and commands
|
|
167
|
+
- [CLI Reference](docs/cli-reference.md) — Command-line options and modes
|
|
168
|
+
- [Inference Providers](docs/inference-providers.md) — Providers and speech timestamps
|
|
169
|
+
- [Sessions](docs/sessions.md) — Persistence, branching, and compaction
|
|
170
|
+
- [Tools](docs/tools.md) — Built-in and custom tools
|
|
171
|
+
- [Extensions](docs/extensions.md) — Tools, commands, hooks, and plugins
|
|
172
|
+
- [Terminal UI](docs/tui.md) — Rendering, Markdown, math, and components
|
|
173
|
+
- [Python API](docs/python-api.md) — Embed Tau in another application
|
|
174
|
+
- [Architecture](docs/architecture.md) — Internal design and data flow
|
|
175
|
+
|
|
176
|
+
The complete documentation index is available at [docs/index.md](docs/index.md).
|
|
177
|
+
|
|
178
|
+
## Install from source
|
|
179
|
+
|
|
180
|
+
```bash
|
|
181
|
+
git clone https://github.com/Jeomon/Tau.git
|
|
182
|
+
cd Tau
|
|
183
|
+
pip install -e .
|
|
184
|
+
tau
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
## Security
|
|
188
|
+
|
|
189
|
+
Tau executes enabled tools with the operating-system permissions of the process
|
|
190
|
+
that launched it. Review project instructions and commands before approving
|
|
191
|
+
work in untrusted repositories. Use a container or external sandbox when
|
|
192
|
+
stronger isolation is required.
|
|
193
|
+
|
|
194
|
+
Dependency versions are pinned and recorded in `uv.lock`. See
|
|
195
|
+
[SECURITY.md](SECURITY.md) for vulnerability reporting and supply-chain
|
|
196
|
+
practices.
|
|
197
|
+
|
|
198
|
+
## Development
|
|
199
|
+
|
|
200
|
+
```bash
|
|
201
|
+
mypy tau/
|
|
202
|
+
pyright tau/
|
|
203
|
+
ruff check tau/
|
|
204
|
+
ruff format tau/
|
|
205
|
+
python -m pytest
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
See [Development Setup](docs/development.md) and
|
|
209
|
+
[Contributing](CONTRIBUTING.md).
|
|
210
|
+
|
|
211
|
+
## License
|
|
212
|
+
|
|
213
|
+
Tau is licensed under the [MIT License](LICENSE).
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
# Tau (τ)
|
|
2
|
+
|
|
3
|
+
Tau is a Python agent framework and terminal coding assistant. It combines an
|
|
4
|
+
interactive terminal UI, multiple model providers, persistent sessions, tool
|
|
5
|
+
execution, and an extension system in one package.
|
|
6
|
+
|
|
7
|
+
<p align="center">
|
|
8
|
+
<img src="assets/tui.jpeg" alt="Tau interactive terminal interface" width="700">
|
|
9
|
+
</p>
|
|
10
|
+
|
|
11
|
+
## Quick start
|
|
12
|
+
|
|
13
|
+
Tau requires Python 3.12 or later.
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
pip install tau-coding-agent
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Set a provider API key and start Tau:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
export ANTHROPIC_API_KEY=sk-ant-...
|
|
23
|
+
tau
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Google AI Studio works through the `google` provider:
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
export GOOGLE_API_KEY=...
|
|
30
|
+
tau --model google/gemini-2.5-flash
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
You can also run `/login` inside Tau to save provider credentials.
|
|
34
|
+
|
|
35
|
+
Then ask Tau to work in the current directory:
|
|
36
|
+
|
|
37
|
+
```text
|
|
38
|
+
Explain this repository, run its tests, and fix any failures.
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Common workflows
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
tau # Start an interactive session
|
|
45
|
+
tau --resume # Resume the latest session
|
|
46
|
+
tau --model claude-sonnet-4-6 # Start with a specific model
|
|
47
|
+
tau --print "Summarize this repository" # Run once and print the result
|
|
48
|
+
tau --mode json "Summarize this repo" # Emit structured JSON events
|
|
49
|
+
tau --mode rpc # Start JSON-RPC mode for IDE clients
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Inside an interactive session:
|
|
53
|
+
|
|
54
|
+
```text
|
|
55
|
+
/model Choose a model
|
|
56
|
+
/resume Resume another session
|
|
57
|
+
/tree Navigate session branches
|
|
58
|
+
/compact Compact a long conversation
|
|
59
|
+
/theme Change the terminal theme
|
|
60
|
+
/login Save provider credentials
|
|
61
|
+
/help Show commands and shortcuts
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
See the [CLI reference](docs/cli-reference.md) for every option and command.
|
|
65
|
+
|
|
66
|
+
## What Tau provides
|
|
67
|
+
|
|
68
|
+
- **Interactive terminal UI** with multiline editing, searchable pickers,
|
|
69
|
+
syntax highlighting, Markdown, and terminal-readable LaTeX math.
|
|
70
|
+
- **Multiple model providers**, including Anthropic, OpenAI, Google Gemini,
|
|
71
|
+
Mistral, Ollama, Groq, xAI, Bedrock, OpenRouter, and others.
|
|
72
|
+
- **Persistent session trees** with resume, fork, clone, branch navigation,
|
|
73
|
+
summarization, and automatic context compaction.
|
|
74
|
+
- **Built-in tools** for terminal commands, file operations, globbing, and
|
|
75
|
+
search. Long-running terminal commands stream into one persistent output
|
|
76
|
+
block.
|
|
77
|
+
- **Media support** for images, audio, video, and text files through file
|
|
78
|
+
references, clipboard input, and the Python API.
|
|
79
|
+
- **Speech APIs** for text-to-speech and speech-to-text, including word or
|
|
80
|
+
segment timestamps when supported by the selected provider.
|
|
81
|
+
- **Extensibility** through custom tools, slash commands, hooks, themes,
|
|
82
|
+
skills, prompts, and in-memory Python extensions.
|
|
83
|
+
- **Embedding and integration** through the Python API, JSON event mode, and
|
|
84
|
+
bidirectional JSON-RPC.
|
|
85
|
+
|
|
86
|
+
## Referencing files
|
|
87
|
+
|
|
88
|
+
Type `@` in the interactive editor to search for a project file:
|
|
89
|
+
|
|
90
|
+
```text
|
|
91
|
+
Review @src/service.py and add tests for its error handling.
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
For one-shot execution, attach a file explicitly:
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
tau --print --prompt "Explain this file" --file src/service.py
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Tau also discovers project instructions from `AGENTS.md` and `CLAUDE.md`.
|
|
101
|
+
See [Project Context Files](docs/project-context.md) for trust and discovery
|
|
102
|
+
behavior.
|
|
103
|
+
|
|
104
|
+
## Authentication and configuration
|
|
105
|
+
|
|
106
|
+
Tau resolves provider credentials in this order:
|
|
107
|
+
|
|
108
|
+
1. A programmatic runtime override
|
|
109
|
+
2. A credential saved in `~/.tau/auth.json` (including keys saved by `/login`)
|
|
110
|
+
3. A provider environment variable such as `ANTHROPIC_API_KEY`,
|
|
111
|
+
`OPENAI_API_KEY`, and `GOOGLE_API_KEY`
|
|
112
|
+
|
|
113
|
+
Settings are merged in this order:
|
|
114
|
+
|
|
115
|
+
1. Built-in defaults
|
|
116
|
+
2. `~/.tau/settings.json`
|
|
117
|
+
3. `.tau/settings.json`
|
|
118
|
+
4. Environment variables
|
|
119
|
+
5. Command-line options
|
|
120
|
+
|
|
121
|
+
See [Authentication](docs/auth.md), [Installation](docs/installation.md), and
|
|
122
|
+
[Inference Providers](docs/inference-providers.md) for provider-specific
|
|
123
|
+
setup.
|
|
124
|
+
|
|
125
|
+
## Documentation
|
|
126
|
+
|
|
127
|
+
- [Quickstart](docs/quickstart.md) — First session in five minutes
|
|
128
|
+
- [Usage](docs/usage.md) — Interactive workflows and commands
|
|
129
|
+
- [CLI Reference](docs/cli-reference.md) — Command-line options and modes
|
|
130
|
+
- [Inference Providers](docs/inference-providers.md) — Providers and speech timestamps
|
|
131
|
+
- [Sessions](docs/sessions.md) — Persistence, branching, and compaction
|
|
132
|
+
- [Tools](docs/tools.md) — Built-in and custom tools
|
|
133
|
+
- [Extensions](docs/extensions.md) — Tools, commands, hooks, and plugins
|
|
134
|
+
- [Terminal UI](docs/tui.md) — Rendering, Markdown, math, and components
|
|
135
|
+
- [Python API](docs/python-api.md) — Embed Tau in another application
|
|
136
|
+
- [Architecture](docs/architecture.md) — Internal design and data flow
|
|
137
|
+
|
|
138
|
+
The complete documentation index is available at [docs/index.md](docs/index.md).
|
|
139
|
+
|
|
140
|
+
## Install from source
|
|
141
|
+
|
|
142
|
+
```bash
|
|
143
|
+
git clone https://github.com/Jeomon/Tau.git
|
|
144
|
+
cd Tau
|
|
145
|
+
pip install -e .
|
|
146
|
+
tau
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
## Security
|
|
150
|
+
|
|
151
|
+
Tau executes enabled tools with the operating-system permissions of the process
|
|
152
|
+
that launched it. Review project instructions and commands before approving
|
|
153
|
+
work in untrusted repositories. Use a container or external sandbox when
|
|
154
|
+
stronger isolation is required.
|
|
155
|
+
|
|
156
|
+
Dependency versions are pinned and recorded in `uv.lock`. See
|
|
157
|
+
[SECURITY.md](SECURITY.md) for vulnerability reporting and supply-chain
|
|
158
|
+
practices.
|
|
159
|
+
|
|
160
|
+
## Development
|
|
161
|
+
|
|
162
|
+
```bash
|
|
163
|
+
mypy tau/
|
|
164
|
+
pyright tau/
|
|
165
|
+
ruff check tau/
|
|
166
|
+
ruff format tau/
|
|
167
|
+
python -m pytest
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
See [Development Setup](docs/development.md) and
|
|
171
|
+
[Contributing](CONTRIBUTING.md).
|
|
172
|
+
|
|
173
|
+
## License
|
|
174
|
+
|
|
175
|
+
Tau is licensed under the [MIT License](LICENSE).
|
|
@@ -61,9 +61,12 @@ Get your API key from [OpenAI's platform](https://platform.openai.com/account/ap
|
|
|
61
61
|
|
|
62
62
|
```bash
|
|
63
63
|
export GOOGLE_API_KEY=...
|
|
64
|
+
tau --model google/gemini-2.5-flash
|
|
64
65
|
```
|
|
65
66
|
|
|
66
|
-
Create a key at [Google AI Studio](https://aistudio.google.com).
|
|
67
|
+
Create a key at [Google AI Studio](https://aistudio.google.com). The `google`
|
|
68
|
+
provider uses the Gemini Developer API and is separate from the Google Vertex
|
|
69
|
+
AI provider.
|
|
67
70
|
|
|
68
71
|
### Mistral AI
|
|
69
72
|
|
|
@@ -144,7 +147,7 @@ When you start Tau, it will load your models. Press `/model` to see all availabl
|
|
|
144
147
|
To remove Tau:
|
|
145
148
|
|
|
146
149
|
```bash
|
|
147
|
-
pip uninstall tau
|
|
150
|
+
pip uninstall tau-coding-agent
|
|
148
151
|
```
|
|
149
152
|
|
|
150
153
|
This removes the tau command but leaves configuration and session data in `~/.tau/`.
|
|
@@ -33,6 +33,7 @@ export OPENAI_API_KEY=sk-...
|
|
|
33
33
|
|
|
34
34
|
```bash
|
|
35
35
|
export GOOGLE_API_KEY=...
|
|
36
|
+
tau --model google/gemini-2.5-flash
|
|
36
37
|
```
|
|
37
38
|
|
|
38
39
|
### Other Providers
|
|
@@ -66,6 +67,10 @@ Summarize this repository and tell me how to run its checks.
|
|
|
66
67
|
|
|
67
68
|
The agent will read files, run commands, and respond with a summary.
|
|
68
69
|
|
|
70
|
+
Markdown responses support terminal-readable inline and display LaTeX math.
|
|
71
|
+
Long-running terminal tools update their existing output block while streaming
|
|
72
|
+
instead of printing a new block for every chunk.
|
|
73
|
+
|
|
69
74
|
### Media Support
|
|
70
75
|
|
|
71
76
|
Tau can process multiple file types. Reference them with `@` during input:
|
|
@@ -10,8 +10,8 @@ Tau ships with seven built-in tools covering file I/O, search, and shell executi
|
|
|
10
10
|
|
|
11
11
|
Read a UTF-8 text file. Invalid byte sequences are replaced during decoding.
|
|
12
12
|
Every returned line is prefixed with a content-based hashline anchor in the form
|
|
13
|
-
`<line>:<hash>|<content>`. Duplicate content, including blank lines,
|
|
14
|
-
|
|
13
|
+
`<line>:<hash>|<content>`. Duplicate content, including blank lines, receives
|
|
14
|
+
distinct anchors so `edit` can target the exact displayed line.
|
|
15
15
|
|
|
16
16
|
| Parameter | Type | Required | Default | Description |
|
|
17
17
|
|-----------|------|----------|---------|-------------|
|
|
@@ -37,6 +37,8 @@ used as a proximity hint and the closest occurrence is selected. An empty
|
|
|
37
37
|
`new_content` deletes the selected range. Because the complete file is rewritten,
|
|
38
38
|
an edit may normalize line endings. Edit-result diffs also display hashline anchors:
|
|
39
39
|
removed lines use their old hashes, while added and context lines use current hashes.
|
|
40
|
+
If an anchor hash is stale or invalid, the model-visible error includes current
|
|
41
|
+
nearby hashline-anchored file content and asks the agent to re-read before retrying.
|
|
40
42
|
Edit diffs always show every changed line. By default they include three unchanged
|
|
41
43
|
lines around each change and collapse larger unchanged gaps into `… (+N lines)`;
|
|
42
44
|
Ctrl+O expands those gaps to show the complete file context.
|
|
@@ -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
|
+
version = "0.6.2"
|
|
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"
|
|
@@ -34,6 +34,7 @@ dependencies = [
|
|
|
34
34
|
"grapheme==0.6.0",
|
|
35
35
|
"arrow==1.4.0",
|
|
36
36
|
"kiwisolver==1.5.0",
|
|
37
|
+
"tiktoken==0.13.0",
|
|
37
38
|
]
|
|
38
39
|
|
|
39
40
|
[project.scripts]
|
|
@@ -146,6 +146,18 @@ _GENERAL_GUIDELINES = [
|
|
|
146
146
|
"Prioritize accuracy over agreement — investigate before confirming, and "
|
|
147
147
|
"disagree when the evidence calls for it."
|
|
148
148
|
),
|
|
149
|
+
(
|
|
150
|
+
"Verify before reporting a task done: run the tests, build, or command that "
|
|
151
|
+
"exercises the change. Don't present untested, partial, or stubbed-out work as complete."
|
|
152
|
+
),
|
|
153
|
+
(
|
|
154
|
+
"When fixing a bug, reproduce it before changing code. If the same fix attempt "
|
|
155
|
+
"fails twice, stop and investigate the root cause instead of retrying it."
|
|
156
|
+
),
|
|
157
|
+
(
|
|
158
|
+
"Treat git history as shared: never force-push, amend a commit that isn't yours, "
|
|
159
|
+
"or skip hooks (--no-verify) without the user's explicit go-ahead."
|
|
160
|
+
),
|
|
149
161
|
]
|
|
150
162
|
|
|
151
163
|
_PRECEDENCE_GUIDELINES = """\
|
|
@@ -20,6 +20,7 @@ from tau.message.utils import strip_unusable_trailing_assistant
|
|
|
20
20
|
from tau.session.compaction import CompactionSettings
|
|
21
21
|
from tau.session.utils import to_llm_messages as _to_llm_messages
|
|
22
22
|
from tau.tool.types import ToolInvocation, ToolResult
|
|
23
|
+
from tau.utils.format import human_size as _fmt_size
|
|
23
24
|
|
|
24
25
|
_log = logging.getLogger(__name__)
|
|
25
26
|
|
|
@@ -33,14 +34,6 @@ _TOOL_CAP_LINES = 2000 # DEFAULT_MAX_LINES
|
|
|
33
34
|
_TOOL_LINE_CAP_BYTES = 2 * 1024 # 2 KB — max bytes for a single line
|
|
34
35
|
|
|
35
36
|
|
|
36
|
-
def _fmt_size(n: int) -> str:
|
|
37
|
-
if n < 1024:
|
|
38
|
-
return f"{n}B"
|
|
39
|
-
if n < 1024 * 1024:
|
|
40
|
-
return f"{n / 1024:.1f}KB"
|
|
41
|
-
return f"{n / (1024 * 1024):.1f}MB"
|
|
42
|
-
|
|
43
|
-
|
|
44
37
|
if TYPE_CHECKING:
|
|
45
38
|
from tau.engine.service import Engine
|
|
46
39
|
from tau.runtime.service import Runtime
|
|
@@ -509,6 +502,31 @@ class Agent:
|
|
|
509
502
|
self._record_compaction_failure("Auto-compaction failed")
|
|
510
503
|
return False
|
|
511
504
|
|
|
505
|
+
def _estimate_indicates_overflow(self) -> bool:
|
|
506
|
+
"""Numeric fallback for overflow detection, independent of error text.
|
|
507
|
+
|
|
508
|
+
A failed request never gets a provider-reported usage back, so there's
|
|
509
|
+
no "provider said input tokens exceeded the window" signal to check —
|
|
510
|
+
only Tau's own pre-send estimate for what was just sent. Some providers
|
|
511
|
+
reject an over-window request with phrasing that matches none of
|
|
512
|
+
_CONTEXT_OVERFLOW_PATTERNS (tau/inference/utils.py) — NVIDIA's
|
|
513
|
+
"max_tokens must be at least 1, got -128" was one instance, where the
|
|
514
|
+
gateway computed context_window - prompt_tokens server-side and
|
|
515
|
+
rejected the negative result. If Tau's own estimate for the request
|
|
516
|
+
that just failed already reached the model's context window, treat it
|
|
517
|
+
as overflow regardless of how the provider phrased the rejection.
|
|
518
|
+
"""
|
|
519
|
+
from tau.session.compaction import estimate_context_tokens
|
|
520
|
+
|
|
521
|
+
if self._context_window <= 0:
|
|
522
|
+
return False
|
|
523
|
+
session_ctx = self._session_manager.build_session_context()
|
|
524
|
+
llm_messages = _to_llm_messages(session_ctx.messages)
|
|
525
|
+
usage = estimate_context_tokens(
|
|
526
|
+
llm_messages, system_prompt=self._system_prompt, tools=self._engine.tools
|
|
527
|
+
)
|
|
528
|
+
return usage.tokens >= self._context_window
|
|
529
|
+
|
|
512
530
|
async def _try_overflow_recovery(self) -> bool:
|
|
513
531
|
"""If the last turn died with a context-overflow error, compact once and signal a retry.
|
|
514
532
|
|
|
@@ -524,7 +542,9 @@ class Agent:
|
|
|
524
542
|
return False
|
|
525
543
|
|
|
526
544
|
last = self._session_manager.find_last_assistant_message()
|
|
527
|
-
if last is None
|
|
545
|
+
if last is None:
|
|
546
|
+
return False
|
|
547
|
+
if last.error_kind != ErrorKind.CONTEXT_OVERFLOW and not self._estimate_indicates_overflow():
|
|
528
548
|
return False
|
|
529
549
|
|
|
530
550
|
# Model-switch guard: the overflow error is from a different model if it predates
|
|
@@ -2,8 +2,6 @@ from abc import ABC, abstractmethod
|
|
|
2
2
|
from collections.abc import Awaitable, Callable
|
|
3
3
|
from pathlib import Path
|
|
4
4
|
|
|
5
|
-
from filelock import FileLock
|
|
6
|
-
|
|
7
5
|
from tau.auth.types import LockResult
|
|
8
6
|
|
|
9
7
|
|
|
@@ -45,6 +43,8 @@ class FileAuthStorage(AuthStorage):
|
|
|
45
43
|
|
|
46
44
|
def with_lock(self, fn: Callable[[str | None], LockResult]) -> LockResult:
|
|
47
45
|
"""Execute fn with exclusive access to storage."""
|
|
46
|
+
from filelock import FileLock
|
|
47
|
+
|
|
48
48
|
with FileLock(self.lock_path):
|
|
49
49
|
current = (
|
|
50
50
|
self.store_path.read_text(encoding="utf-8") if self.store_path.exists() else None
|
|
@@ -59,6 +59,8 @@ class FileAuthStorage(AuthStorage):
|
|
|
59
59
|
self, fn: Callable[[str | None], Awaitable[LockResult]]
|
|
60
60
|
) -> LockResult:
|
|
61
61
|
"""Execute async fn with exclusive access to storage."""
|
|
62
|
+
from filelock import FileLock
|
|
63
|
+
|
|
62
64
|
with FileLock(self.lock_path):
|
|
63
65
|
current = (
|
|
64
66
|
self.store_path.read_text(encoding="utf-8") if self.store_path.exists() else None
|