tau-coding-agent 0.4.6__tar.gz → 0.4.8__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {tau_coding_agent-0.4.6/tau_coding_agent.egg-info → tau_coding_agent-0.4.8}/PKG-INFO +3 -1
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/docs/architecture.md +10 -8
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/docs/auth.md +9 -9
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/docs/cli-reference.md +21 -6
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/docs/development.md +5 -5
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/docs/docs.json +12 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/docs/extensions.md +42 -1
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/docs/http-proxy.md +1 -1
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/docs/index.md +3 -3
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/docs/inference-providers.md +13 -64
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/docs/installation.md +6 -11
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/docs/keybindings.md +24 -8
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/docs/messages.md +40 -34
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/docs/project-context.md +20 -13
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/docs/project-structure.md +16 -20
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/docs/prompts.md +2 -5
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/docs/python-api.md +26 -1
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/docs/quickstart.md +8 -13
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/docs/sessions.md +5 -10
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/docs/settings.md +27 -9
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/docs/skills.md +2 -7
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/docs/themes.md +9 -25
- tau_coding_agent-0.4.8/docs/tools.md +231 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/docs/usage.md +15 -17
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/pyproject.toml +3 -2
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/agent/prompt/builder.py +93 -44
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/agent/prompt/types.py +4 -3
- tau_coding_agent-0.4.8/tau/builtins/extensions/btw/__init__.py +303 -0
- tau_coding_agent-0.4.8/tau/builtins/extensions/watch/__init__.py +219 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/builtins/models/text.py +478 -86
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/builtins/providers/text.py +1 -3
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/builtins/tools/edit.py +63 -5
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/builtins/tools/glob.py +7 -3
- tau_coding_agent-0.4.8/tau/builtins/tools/grep.py +302 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/builtins/tools/ls.py +7 -2
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/builtins/tools/read.py +7 -5
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/builtins/tools/terminal.py +4 -4
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/builtins/tools/write.py +1 -1
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/console/cli.py +1 -1
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/engine/service.py +12 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/engine/types.py +9 -1
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/extensions/api.py +8 -3
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/hooks/engine.py +2 -1
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/inference/api/text/anthropic_claude_code.py +9 -2
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/inference/api/text/anthropic_messages.py +9 -2
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/inference/api/text/anthropic_vertex.py +9 -2
- tau_coding_agent-0.4.8/tau/inference/api/text/dialect.py +144 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/inference/api/text/github_copilot_chat.py +1 -1
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/inference/api/text/openai_completions.py +12 -21
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/inference/api/text/openai_vertex.py +1 -1
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/inference/api/text/service.py +2 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/inference/api/text/utils.py +24 -7
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/inference/model/types.py +1 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/inference/types.py +1 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/modes/interactive/app.py +101 -19
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/modes/interactive/commands/appearance.py +100 -69
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/modes/interactive/commands/auth.py +1 -1
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/modes/interactive/commands/model.py +42 -4
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/modes/interactive/components/command_palette.py +4 -3
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/modes/interactive/components/config_selector.py +15 -22
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/modes/interactive/components/extension_selector.py +5 -5
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/modes/interactive/components/file_picker.py +4 -3
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/modes/interactive/components/layout.py +70 -30
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/modes/interactive/components/message_list.py +54 -15
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/modes/interactive/components/model_selector.py +99 -46
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/modes/interactive/components/oauth_selector.py +5 -5
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/modes/interactive/components/overlays.py +202 -30
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/modes/interactive/components/selector_controller.py +12 -5
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/modes/interactive/components/session_selector.py +93 -84
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/modes/interactive/components/settings_selector.py +85 -38
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/modes/interactive/components/theme_selector.py +5 -5
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/modes/interactive/components/thinking_selector.py +3 -4
- tau_coding_agent-0.4.8/tau/modes/interactive/components/voice_selector.py +96 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/session/manager.py +2 -1
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/session/utils.py +33 -25
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/settings/manager.py +29 -7
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/settings/types.py +5 -3
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/tui/autocomplete.py +4 -3
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/tui/components/select_list.py +40 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/tui/components/text_input.py +191 -25
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/tui/input.py +41 -31
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/tui/markdown.py +17 -4
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/tui/terminal.py +27 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/tui/theme.py +5 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/tui/tui.py +34 -5
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/tui/ui_context.py +30 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/tui/utils.py +33 -2
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8/tau_coding_agent.egg-info}/PKG-INFO +3 -1
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau_coding_agent.egg-info/SOURCES.txt +14 -2
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau_coding_agent.egg-info/requires.txt +2 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tests/test_agent_prompt.py +51 -10
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tests/test_ansi.py +12 -1
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tests/test_auth_command.py +1 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tests/test_auth_manager.py +5 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tests/test_auth_storage.py +12 -3
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tests/test_builtin_tools.py +46 -0
- tau_coding_agent-0.4.8/tests/test_builtin_watch.py +64 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tests/test_diff.py +3 -8
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tests/test_editor_protocol.py +2 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tests/test_engine_execution.py +2 -2
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tests/test_engine_steering.py +26 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tests/test_engine_types.py +1 -0
- tau_coding_agent-0.4.8/tests/test_escape_behavior.py +39 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tests/test_extension_api.py +71 -1
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tests/test_footer_utils.py +1 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tests/test_fuzzy.py +1 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tests/test_http_proxy.py +10 -2
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tests/test_image_processing.py +43 -12
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tests/test_inference_api_text_utils.py +11 -5
- tau_coding_agent-0.4.8/tests/test_inference_dialect.py +31 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tests/test_inference_error_utils.py +2 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tests/test_inference_types.py +1 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tests/test_inference_utils.py +20 -11
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tests/test_keybindings.py +6 -2
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tests/test_markdown.py +4 -1
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tests/test_message_types.py +20 -4
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tests/test_message_utils.py +8 -1
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tests/test_model_availability.py +1 -0
- tau_coding_agent-0.4.8/tests/test_model_command.py +72 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tests/test_model_registry.py +9 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tests/test_model_selector_modal.py +119 -6
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tests/test_model_types.py +1 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tests/test_oauth_utils.py +1 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tests/test_packages_utils.py +6 -0
- tau_coding_agent-0.4.8/tests/test_peer_extension.py +46 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tests/test_pkce.py +1 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tests/test_prompts_expand.py +1 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tests/test_prompts_loader.py +1 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tests/test_prompts_registry.py +7 -2
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tests/test_provider_registry.py +1 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tests/test_rpc_mode.py +1 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tests/test_secrets.py +1 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tests/test_selector_controller.py +26 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tests/test_session_manager.py +32 -2
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tests/test_session_trust_persist.py +2 -3
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tests/test_session_types.py +6 -1
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tests/test_session_utils.py +7 -1
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tests/test_settings_manager.py +15 -1
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tests/test_settings_paths.py +7 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tests/test_settings_storage.py +10 -1
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tests/test_settings_utils.py +1 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tests/test_skills_loader.py +4 -1
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tests/test_skills_registry.py +1 -0
- tau_coding_agent-0.4.8/tests/test_subagents_extension.py +267 -0
- tau_coding_agent-0.4.8/tests/test_text_input.py +229 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tests/test_text_llm_invoke.py +49 -19
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tests/test_theme_loader.py +1 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tests/test_themes_registry.py +14 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tests/test_thinking_render.py +22 -1
- tau_coding_agent-0.4.8/tests/test_tool_render.py +237 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tests/test_trust_manager.py +2 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tests/test_trust_utils.py +6 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tests/test_tui_capabilities.py +1 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tests/test_tui_input.py +48 -10
- tau_coding_agent-0.4.8/tests/test_tui_renderer.py +117 -0
- tau_coding_agent-0.4.8/tests/test_tui_select_list.py +40 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tests/test_tui_theme.py +1 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tests/test_tui_utils.py +1 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tests/test_version_check.py +1 -0
- tau_coding_agent-0.4.8/tests/test_voice_selector.py +46 -0
- tau_coding_agent-0.4.6/docs/IMPLEMENTATION_SUMMARY.md +0 -163
- tau_coding_agent-0.4.6/docs/tools.md +0 -159
- tau_coding_agent-0.4.6/tau/builtins/tools/grep.py +0 -174
- tau_coding_agent-0.4.6/tests/test_text_input.py +0 -17
- tau_coding_agent-0.4.6/tests/test_tool_render.py +0 -128
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/LICENSE +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/MANIFEST.in +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/README.md +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/docs/extension-settings.md +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/setup.cfg +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/__init__.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/agent/__init__.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/agent/prompt/__init__.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/agent/service.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/agent/types.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/auth/manager.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/auth/storage.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/auth/types.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/builtins/__init__.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/builtins/commands/__init__.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/builtins/commands/clear.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/builtins/commands/compact.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/builtins/commands/reload.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/builtins/commands/session.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/builtins/extensions/footer/__init__.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/builtins/extensions/footer/git.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/builtins/extensions/footer/model.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/builtins/extensions/footer/utils.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/builtins/extensions/header/__init__.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/builtins/models/__init__.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/builtins/models/audio.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/builtins/models/image.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/builtins/models/video.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/builtins/prompts/commit.md +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/builtins/prompts/docs.md +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/builtins/prompts/explain.md +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/builtins/prompts/fix.md +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/builtins/prompts/refactor.md +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/builtins/prompts/review.md +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/builtins/prompts/test.md +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/builtins/providers/__init__.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/builtins/providers/audio.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/builtins/providers/image.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/builtins/providers/video.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/builtins/skills/code-review/SKILL.md +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/builtins/skills/debug/SKILL.md +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/builtins/skills/git-commit/SKILL.md +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/builtins/themes/dark.yaml +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/builtins/themes/light.yaml +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/builtins/tools/__init__.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/builtins/tools/utils.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/commands/__init__.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/commands/registry.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/commands/types.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/console/__init__.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/console/commands/__init__.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/console/commands/auth.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/console/commands/packages.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/console/commands/update.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/core/__init__.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/core/registry.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/engine/__init__.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/extensions/__init__.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/extensions/context.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/extensions/loader.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/extensions/runtime.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/extensions/settings.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/hooks/__init__.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/hooks/inference.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/hooks/runtime.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/hooks/service.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/hooks/session.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/hooks/tui.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/hooks/types.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/inference/__init__.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/inference/api/__init__.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/inference/api/audio/__init__.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/inference/api/audio/base.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/inference/api/audio/builtins.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/inference/api/audio/elevenlabs_audio.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/inference/api/audio/gemini_audio.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/inference/api/audio/openai_audio.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/inference/api/audio/registry.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/inference/api/audio/sarvam_audio.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/inference/api/audio/service.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/inference/api/audio/utils.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/inference/api/availability.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/inference/api/image/__init__.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/inference/api/image/base.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/inference/api/image/builtins.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/inference/api/image/gemini_image.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/inference/api/image/openai_image.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/inference/api/image/openrouter.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/inference/api/image/registry.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/inference/api/image/service.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/inference/api/registry.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/inference/api/text/__init__.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/inference/api/text/base.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/inference/api/text/builtins.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/inference/api/text/gemini_generate.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/inference/api/text/google_antigravity.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/inference/api/text/google_vertex.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/inference/api/text/mistral_chat.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/inference/api/text/ollama_chat.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/inference/api/text/openai_codex_responses.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/inference/api/text/openai_responses.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/inference/api/text/registry.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/inference/api/text/types.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/inference/api/video/__init__.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/inference/api/video/base.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/inference/api/video/builtins.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/inference/api/video/fal_video.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/inference/api/video/openrouter_video.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/inference/api/video/registry.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/inference/api/video/service.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/inference/model/__init__.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/inference/model/registry.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/inference/provider/__init__.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/inference/provider/oauth/__init__.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/inference/provider/oauth/anthropic_claude_code.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/inference/provider/oauth/github_copilot.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/inference/provider/oauth/google_antigravity.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/inference/provider/oauth/openai_codex.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/inference/provider/oauth/pkce.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/inference/provider/oauth/types.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/inference/provider/oauth/utils.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/inference/provider/registry.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/inference/provider/types.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/inference/utils.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/message/__init__.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/message/types.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/message/utils.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/modes/__init__.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/modes/interactive/__init__.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/modes/interactive/agent_hooks.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/modes/interactive/commands/__init__.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/modes/interactive/commands/context.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/modes/interactive/commands/extensions.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/modes/interactive/commands/misc.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/modes/interactive/commands/session.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/modes/interactive/components/__init__.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/modes/interactive/components/tree_selector.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/modes/interactive/components/trust_screen.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/modes/interactive/input_handler.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/modes/print/__init__.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/modes/rpc/__init__.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/modes/rpc/mode.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/modes/rpc/types.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/packages/__init__.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/packages/manager.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/packages/types.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/packages/utils.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/prompts/expand.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/prompts/loader.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/prompts/registry.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/prompts/types.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/resources/__init__.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/resources/loader.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/resources/types.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/runtime/dependencies.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/runtime/service.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/runtime/types.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/session/branch_summarization.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/session/compaction.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/session/types.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/settings/paths.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/settings/storage.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/settings/utils.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/skills/loader.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/skills/registry.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/skills/types.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/themes/loader.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/themes/registry.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/themes/types.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/tool/__init__.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/tool/registry.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/tool/render.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/tool/types.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/trust/__init__.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/trust/manager.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/trust/types.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/trust/utils.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/tui/__init__.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/tui/component.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/tui/components/__init__.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/tui/components/box.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/tui/components/editor.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/tui/components/image.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/tui/components/spinner.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/tui/keybinding_hints.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/utils/__init__.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/utils/http_proxy.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/utils/image_processing.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/utils/secrets.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau/utils/version_check.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau_coding_agent.egg-info/dependency_links.txt +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau_coding_agent.egg-info/entry_points.txt +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tau_coding_agent.egg-info/top_level.txt +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tests/test_agent_compaction.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tests/test_agent_types.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tests/test_branch_navigation.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tests/test_branch_summarization.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tests/test_cli_inputs.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tests/test_command_execution_policy.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tests/test_command_registry.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tests/test_compaction.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tests/test_extension_lifecycle.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tests/test_footer_model.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tests/test_package_resources.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tests/test_resource_loader.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tests/test_runtime_sdk.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tests/test_tool_registry.py +0 -0
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tests/test_tui_layout_sizing.py +1 -1
- {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.8}/tests/test_ui_context.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: tau-coding-agent
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.8
|
|
4
4
|
Summary: A self-extensible agent CLI with terminal UI, multi-provider LLM support, session management with branching, and a plugin system for tools and commands
|
|
5
5
|
Requires-Python: >=3.12
|
|
6
6
|
Description-Content-Type: text/markdown
|
|
@@ -26,8 +26,10 @@ Requires-Dist: pygments==2.20.0
|
|
|
26
26
|
Requires-Dist: pathspec==1.1.1
|
|
27
27
|
Requires-Dist: gitpython==3.1.50
|
|
28
28
|
Requires-Dist: grapheme==0.6.0
|
|
29
|
+
Requires-Dist: arrow==1.4.0
|
|
29
30
|
Provides-Extra: tools
|
|
30
31
|
Requires-Dist: ripgrep>=14.0.0; extra == "tools"
|
|
32
|
+
Requires-Dist: ast-grep-cli>=0.44.0; extra == "tools"
|
|
31
33
|
Dynamic: license-file
|
|
32
34
|
|
|
33
35
|
# Tau (τ)
|
|
@@ -183,8 +183,9 @@ Extensions can react to lifecycle events:
|
|
|
183
183
|
- `session_start` - Session begins
|
|
184
184
|
- `turn_start` - New inference turn starts
|
|
185
185
|
- `turn_end` - Turn completes (before rendering)
|
|
186
|
-
- `
|
|
187
|
-
- `
|
|
186
|
+
- `tool_call` - Tool call can be inspected, rewritten, or blocked
|
|
187
|
+
- `tool_result` - Tool result can be inspected or rewritten
|
|
188
|
+
- `tool_execution_start` / `tool_execution_end` - Tool handler lifecycle
|
|
188
189
|
- `tui_ready` - TUI is ready for input
|
|
189
190
|
- `tui_exit` - TUI is exiting
|
|
190
191
|
- `compaction_start` - Compaction begins
|
|
@@ -194,12 +195,13 @@ Hooks allow extensions to inspect state, modify messages, or react to events.
|
|
|
194
195
|
|
|
195
196
|
## Provider Abstraction
|
|
196
197
|
|
|
197
|
-
|
|
198
|
+
Providers describe authentication, endpoints, and the API adapter used for a
|
|
199
|
+
request. Adapters stream normalized `LLMEvent` objects:
|
|
198
200
|
|
|
199
201
|
```python
|
|
200
|
-
class
|
|
201
|
-
async def
|
|
202
|
-
|
|
202
|
+
class BaseAPI:
|
|
203
|
+
async def stream(self, context, model, options) -> AsyncIterator[LLMEvent]:
|
|
204
|
+
...
|
|
203
205
|
```
|
|
204
206
|
|
|
205
207
|
The inference module handles provider-specific details (API keys, endpoints, format conversions).
|
|
@@ -289,9 +291,9 @@ React to lifecycle events:
|
|
|
289
291
|
|
|
290
292
|
```python
|
|
291
293
|
def register(tau):
|
|
292
|
-
async def
|
|
294
|
+
async def on_tool_end(event, ctx):
|
|
293
295
|
print(f"Tool {event.tool_name} finished")
|
|
294
|
-
tau.
|
|
296
|
+
tau.on("tool_execution_end", on_tool_end)
|
|
295
297
|
```
|
|
296
298
|
|
|
297
299
|
### Dialogs
|
|
@@ -6,7 +6,7 @@ Tau stores credentials for LLM providers in `~/.tau/auth.json`. This page explai
|
|
|
6
6
|
|
|
7
7
|
For each provider, tau resolves credentials in this order:
|
|
8
8
|
|
|
9
|
-
1. **Runtime override** — set
|
|
9
|
+
1. **Runtime override** — set programmatically through `AuthManager` (not persisted)
|
|
10
10
|
2. **Stored credential** — read from `~/.tau/auth.json`
|
|
11
11
|
3. **Environment variable** — `{PROVIDER}_API_KEY` (e.g. `ANTHROPIC_API_KEY`, `OPENAI_API_KEY`)
|
|
12
12
|
|
|
@@ -69,13 +69,11 @@ export OPENAI_API_KEY="sk-..."
|
|
|
69
69
|
|
|
70
70
|
No file is needed — tau picks these up automatically.
|
|
71
71
|
|
|
72
|
-
###
|
|
72
|
+
### Runtime override
|
|
73
73
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
Not stored. Only applies to the current session.
|
|
74
|
+
Embedding applications may call
|
|
75
|
+
`auth_manager.set_runtime_api_key(provider, key)`. The main Tau CLI does not
|
|
76
|
+
provide an `--api-key` flag.
|
|
79
77
|
|
|
80
78
|
### Auth file (direct edit)
|
|
81
79
|
|
|
@@ -91,7 +89,9 @@ Run `/login` from within a session. Tau asks which authentication type to use:
|
|
|
91
89
|
|
|
92
90
|
### `/logout` command
|
|
93
91
|
|
|
94
|
-
Run `/logout` to open a list of providers that have credentials stored in
|
|
92
|
+
Run `/logout` to open a list of providers that have credentials stored in
|
|
93
|
+
`~/.tau/auth.json`. Select one to remove it. Environment variables and
|
|
94
|
+
programmatic runtime overrides are unaffected.
|
|
95
95
|
|
|
96
96
|
## Auth File Format
|
|
97
97
|
|
|
@@ -120,7 +120,7 @@ From Python (e.g. in an extension):
|
|
|
120
120
|
status = auth_manager.get_auth_status("anthropic")
|
|
121
121
|
# status.configured → True / False
|
|
122
122
|
# status.source → "stored" | "runtime" | "env" | None
|
|
123
|
-
# status.label → env var name or "
|
|
123
|
+
# status.label → env var name or "runtime override"
|
|
124
124
|
```
|
|
125
125
|
|
|
126
126
|
## Security
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
## Usage
|
|
4
4
|
|
|
5
5
|
```bash
|
|
6
|
-
tau [OPTIONS] [
|
|
6
|
+
tau [OPTIONS] COMMAND [ARGS]...
|
|
7
7
|
```
|
|
8
8
|
|
|
9
9
|
Use `--prompt TEXT` for a non-interactive prompt. Piped stdin can supply or
|
|
@@ -13,14 +13,20 @@ augment it.
|
|
|
13
13
|
|
|
14
14
|
| Option | Short | Description |
|
|
15
15
|
|--------|-------|-------------|
|
|
16
|
+
| `--version` | `-v` | Print the installed version |
|
|
17
|
+
| `--debug` | `-d` | Enable debug logging |
|
|
18
|
+
| `--cwd PATH` | `-c` | Set the working directory |
|
|
16
19
|
| `--prompt` | `-p` | Run a non-interactive prompt |
|
|
20
|
+
| `--output-format` | `-f` | Non-interactive output: `text` or `json` |
|
|
21
|
+
| `--quiet` | `-q` | Hide the non-interactive spinner |
|
|
17
22
|
| `--provider` | | Provider to use, e.g. `anthropic`, `openai`, `groq` |
|
|
18
23
|
| `--model` | | Model ID, or `provider/model` shorthand (e.g. `groq/llama-3.3-70b-versatile`) |
|
|
19
|
-
| `--theme` | `-t` | UI theme: `
|
|
24
|
+
| `--theme` | `-t` | UI theme: `dark`, `light`, or an installed custom theme |
|
|
20
25
|
| `--resume [ID]` | `-r` | Resume the most recent or a specified session |
|
|
21
26
|
| `--fork ID` | | Fork a specified session at startup |
|
|
22
27
|
| `--session-dir PATH` | | Override session storage |
|
|
23
28
|
| `--name NAME` | | Set the session display name at startup |
|
|
29
|
+
| `--system TEXT` | `-s` | Replace the generated system prompt |
|
|
24
30
|
| `--ephemeral` | `-e` | Don't save this session to disk |
|
|
25
31
|
| `--approve` | `-a` | Trust project-local files (extensions, settings, context files) for this run |
|
|
26
32
|
| `--no-approve` | `-na` | Don't trust project-local files for this run |
|
|
@@ -31,6 +37,13 @@ augment it.
|
|
|
31
37
|
|
|
32
38
|
## Run Modes
|
|
33
39
|
|
|
40
|
+
## Interactive Commands
|
|
41
|
+
|
|
42
|
+
`/watch <url> [question]` loads metadata and available English captions for a
|
|
43
|
+
public video through `yt-dlp`, then sends them to the active model. Install
|
|
44
|
+
`yt-dlp` separately and ensure it is available on `PATH`. Video frames and
|
|
45
|
+
audio transcription are not performed.
|
|
46
|
+
|
|
34
47
|
### Interactive (default)
|
|
35
48
|
|
|
36
49
|
Start the full terminal UI:
|
|
@@ -59,7 +72,7 @@ that order.
|
|
|
59
72
|
Emit a JSON event stream on stdout:
|
|
60
73
|
|
|
61
74
|
```bash
|
|
62
|
-
tau --mode json "Your prompt"
|
|
75
|
+
tau --mode json --prompt "Your prompt"
|
|
63
76
|
```
|
|
64
77
|
|
|
65
78
|
Each line is a JSON object representing a lifecycle event (`agent_start`, `message_end`, etc.).
|
|
@@ -338,8 +351,7 @@ An explicit `--provider` always overrides the inferred provider.
|
|
|
338
351
|
|
|
339
352
|
```bash
|
|
340
353
|
tau --resume # continue most recent session
|
|
341
|
-
tau --
|
|
342
|
-
tau --session ~/.tau/sessions/proj/file.jsonl # resume by file path
|
|
354
|
+
tau --resume abc123 # resume by session ID
|
|
343
355
|
tau --ephemeral # temporary session, nothing saved
|
|
344
356
|
```
|
|
345
357
|
|
|
@@ -353,13 +365,16 @@ Manage provider credentials.
|
|
|
353
365
|
tau auth --help
|
|
354
366
|
```
|
|
355
367
|
|
|
368
|
+
Package management is available through `tau install`, `tau remove`,
|
|
369
|
+
`tau list`, and `tau update`.
|
|
370
|
+
|
|
356
371
|
## Environment Variables
|
|
357
372
|
|
|
358
373
|
| Variable | Effect |
|
|
359
374
|
|----------|--------|
|
|
360
375
|
| `ANTHROPIC_API_KEY` | Anthropic API key |
|
|
361
376
|
| `OPENAI_API_KEY` | OpenAI API key |
|
|
362
|
-
| `
|
|
377
|
+
| `GOOGLE_API_KEY` | Google Gemini key |
|
|
363
378
|
| `<PROVIDER>_API_KEY` | API key for any provider (uppercased provider name) |
|
|
364
379
|
|
|
365
380
|
Provider and model can also be set permanently in `settings.json` — see [Settings](settings.md).
|
|
@@ -4,15 +4,15 @@ This page covers setting up a development environment for tau.
|
|
|
4
4
|
|
|
5
5
|
## Prerequisites
|
|
6
6
|
|
|
7
|
-
- Python 3.
|
|
7
|
+
- Python 3.12 or higher
|
|
8
8
|
- git
|
|
9
9
|
- pip or uv (Python package manager)
|
|
10
10
|
|
|
11
11
|
## Clone the Repository
|
|
12
12
|
|
|
13
13
|
```bash
|
|
14
|
-
git clone https://github.com/
|
|
15
|
-
cd
|
|
14
|
+
git clone https://github.com/Jeomon/Tau.git
|
|
15
|
+
cd Tau
|
|
16
16
|
```
|
|
17
17
|
|
|
18
18
|
## Install Dependencies
|
|
@@ -63,7 +63,7 @@ tau --theme dark
|
|
|
63
63
|
### Run with Debug Logging
|
|
64
64
|
|
|
65
65
|
```bash
|
|
66
|
-
|
|
66
|
+
tau --debug
|
|
67
67
|
```
|
|
68
68
|
|
|
69
69
|
### Run Tests
|
|
@@ -215,7 +215,7 @@ logger.error("Error message")
|
|
|
215
215
|
Enable debug logging:
|
|
216
216
|
|
|
217
217
|
```bash
|
|
218
|
-
|
|
218
|
+
tau --debug
|
|
219
219
|
```
|
|
220
220
|
|
|
221
221
|
## IDE Setup
|
|
@@ -43,6 +43,10 @@
|
|
|
43
43
|
{
|
|
44
44
|
"title": "Tools",
|
|
45
45
|
"path": "tools.md"
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"title": "Project Context",
|
|
49
|
+
"path": "project-context.md"
|
|
46
50
|
}
|
|
47
51
|
]
|
|
48
52
|
},
|
|
@@ -57,6 +61,10 @@
|
|
|
57
61
|
"title": "Extensions",
|
|
58
62
|
"path": "extensions.md"
|
|
59
63
|
},
|
|
64
|
+
{
|
|
65
|
+
"title": "Extension Settings",
|
|
66
|
+
"path": "extension-settings.md"
|
|
67
|
+
},
|
|
60
68
|
{
|
|
61
69
|
"title": "Themes",
|
|
62
70
|
"path": "themes.md"
|
|
@@ -76,6 +84,10 @@
|
|
|
76
84
|
{
|
|
77
85
|
"title": "Authentication",
|
|
78
86
|
"path": "auth.md"
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
"title": "HTTP Proxy",
|
|
90
|
+
"path": "http-proxy.md"
|
|
79
91
|
}
|
|
80
92
|
]
|
|
81
93
|
},
|
|
@@ -487,6 +487,34 @@ def register(tau):
|
|
|
487
487
|
| `input` | `text`, `source` | `InputEventResult` | New user message received. `source`: `interactive \| rpc \| extension \| queue`. Return `action="transform"` with `text=` to replace, or `action="handled"` to suppress |
|
|
488
488
|
| `context` | `messages` | `ContextEventResult` | Full message history about to be sent to LLM. Return `messages=` to rewrite it |
|
|
489
489
|
|
|
490
|
+
For dynamic browser or computer-use state that must be refreshed before every
|
|
491
|
+
LLM request without being persisted, return `ephemeral_messages` from a
|
|
492
|
+
`context` handler:
|
|
493
|
+
|
|
494
|
+
```python
|
|
495
|
+
from tau.hooks import ContextEventResult
|
|
496
|
+
from tau.message.types import UserMessage
|
|
497
|
+
|
|
498
|
+
def register(tau):
|
|
499
|
+
@tau.on("context")
|
|
500
|
+
async def inject_state(event, ctx):
|
|
501
|
+
screenshot = await capture_screen()
|
|
502
|
+
return ContextEventResult(
|
|
503
|
+
ephemeral_messages=[
|
|
504
|
+
UserMessage.with_images(
|
|
505
|
+
"Current browser state",
|
|
506
|
+
images=[screenshot],
|
|
507
|
+
)
|
|
508
|
+
]
|
|
509
|
+
)
|
|
510
|
+
```
|
|
511
|
+
|
|
512
|
+
The hook runs before every inference, including after tool execution.
|
|
513
|
+
`ephemeral_messages` must contain only `UserMessage` objects. They are appended
|
|
514
|
+
only to the provider request, are not persisted, and are excluded from
|
|
515
|
+
Anthropic prompt-cache breakpoints. Use `messages=` in the same result to
|
|
516
|
+
replace the stable request context.
|
|
517
|
+
|
|
490
518
|
**Streaming & messages**
|
|
491
519
|
|
|
492
520
|
| Event | Payload fields | Result type | Description |
|
|
@@ -628,6 +656,19 @@ def register(tau):
|
|
|
628
656
|
|
|
629
657
|
## Keyboard shortcuts
|
|
630
658
|
|
|
659
|
+
`register_shortcut` takes a literal key combination. Tau compares extension
|
|
660
|
+
shortcuts with the effective `KeyMap`.
|
|
661
|
+
Safety-critical editor and application bindings are reserved and cannot be
|
|
662
|
+
replaced by extensions. An extension may replace a non-reserved global
|
|
663
|
+
application binding, with a warning. If multiple extensions register the same
|
|
664
|
+
key, the last loaded extension wins and Tau reports a warning.
|
|
665
|
+
|
|
666
|
+
Some low-level editor operations that are not exposed as `KeyMap` actions,
|
|
667
|
+
such as cursor movement, are still consumed directly by the focused editor.
|
|
668
|
+
Registering an extension shortcut does not replace those operations. See
|
|
669
|
+
[Customising keybindings](keybindings.md#customising-keybindings) for the
|
|
670
|
+
available actions.
|
|
671
|
+
|
|
631
672
|
```python
|
|
632
673
|
def register(tau):
|
|
633
674
|
@tau.register_shortcut("ctrl+g", "Open greeter")
|
|
@@ -816,7 +857,7 @@ def register(tau):
|
|
|
816
857
|
| `tau.register_tool(tool)` | Add a tool the agent can call |
|
|
817
858
|
| `tau.register_command(name, desc, handler, aliases=[], get_argument_completions=None, argument_hint=None, requires_idle=True)` | Add a `/name` slash command; set `requires_idle=False` only for UI-only or read-only handlers safe during an active turn |
|
|
818
859
|
| `tau.on(event, handler)` / `@tau.on(event)` | Subscribe to a lifecycle event |
|
|
819
|
-
| `tau.register_shortcut(key, desc, handler)` | Bind a keyboard shortcut |
|
|
860
|
+
| `tau.register_shortcut(key, desc, handler)` | Bind a literal keyboard shortcut |
|
|
820
861
|
| `tau.append_prompt(text)` | Append text to the system prompt |
|
|
821
862
|
| `tau.register_theme(name, theme)` | Add a named theme to the picker |
|
|
822
863
|
| `tau.register_message_renderer(type, fn)` | Render custom message types in the TUI |
|
|
@@ -378,4 +378,4 @@ OAuth login/refresh operations (e.g., GitHub Copilot, OpenAI, Anthropic) also re
|
|
|
378
378
|
|
|
379
379
|
- [Settings](settings.md) — Main settings reference
|
|
380
380
|
- [Extensions](extensions.md) — Extensions can also use proxy settings via SettingsManager
|
|
381
|
-
- [Providers](providers.md) — Model provider configuration
|
|
381
|
+
- [Inference Providers](inference-providers.md) — Model provider configuration
|
|
@@ -6,7 +6,7 @@ Tau is a Python CLI framework for building interactive agent applications. It pr
|
|
|
6
6
|
|
|
7
7
|
Tau allows you to:
|
|
8
8
|
- Chat with LLMs (Claude, GPT, Gemini, Mistral, Ollama) in a terminal UI
|
|
9
|
-
- Execute tools (terminal commands,
|
|
9
|
+
- Execute tools (terminal commands, file operations, search) within conversations
|
|
10
10
|
- Save and resume sessions with branching and forking
|
|
11
11
|
- Extend Tau with custom tools, commands, themes, and skills
|
|
12
12
|
- Embed Tau in Python applications as a library
|
|
@@ -27,6 +27,7 @@ Tau allows you to:
|
|
|
27
27
|
- [Sessions](sessions.md) - Session persistence, branching, compaction, JSONL format
|
|
28
28
|
- [Inference Providers](inference-providers.md) - Supported LLMs and provider setup
|
|
29
29
|
- [Tools](tools.md) - Tool registry, built-in tools, execution model
|
|
30
|
+
- [Project Context Files](project-context.md) - Repository-specific agent instructions
|
|
30
31
|
- [CLI Reference](cli-reference.md) - All command-line options and run modes
|
|
31
32
|
|
|
32
33
|
## Configuration & Customization
|
|
@@ -52,14 +53,13 @@ Tau allows you to:
|
|
|
52
53
|
|
|
53
54
|
- [Project Structure](project-structure.md) - Codebase organization and module breakdown
|
|
54
55
|
- [Development Setup](development.md) - Local development environment and testing
|
|
55
|
-
- [Implementation Summary](IMPLEMENTATION_SUMMARY.md) - Recent changes and features
|
|
56
56
|
|
|
57
57
|
## Reference
|
|
58
58
|
|
|
59
59
|
- [CLI Reference](cli-reference.md) - All flags, modes (interactive/print/json/rpc)
|
|
60
60
|
- [Settings Reference](settings.md) - Complete settings schema
|
|
61
61
|
- [Session Format](sessions.md) - JSONL file format and structure
|
|
62
|
-
- [Hooks & Events](extensions.md#hooks) - All available hooks and events
|
|
62
|
+
- [Hooks & Events](extensions.md#event-hooks) - All available hooks and events
|
|
63
63
|
|
|
64
64
|
---
|
|
65
65
|
|
|
@@ -6,22 +6,22 @@ This page documents all supported LLM inference providers and their setup.
|
|
|
6
6
|
|
|
7
7
|
Tau supports the following inference providers:
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
9
|
+
Built-in API-key providers are `openai`, `anthropic`, `google`, `nvidia`,
|
|
10
|
+
`groq`, `openrouter`, `perplexity`, `xai`, `bedrock`, `kimi`, `minimax`,
|
|
11
|
+
`cerebras`, `deepseek`, `kilocode`, `fireworks`, and `mistral`.
|
|
12
|
+
|
|
13
|
+
Tau also includes local `ollama`, Google/Anthropic/OpenAI-compatible Vertex AI
|
|
14
|
+
providers, and OAuth providers for OpenAI Codex, Claude Code, GitHub Copilot,
|
|
15
|
+
and Google Antigravity. Extensions can register additional providers.
|
|
16
|
+
|
|
17
|
+
The model picker is the authoritative model catalogue. Built-in model metadata
|
|
18
|
+
changes more frequently than this guide, so model IDs and pricing are not
|
|
19
|
+
enumerated here.
|
|
18
20
|
|
|
19
21
|
## Anthropic
|
|
20
22
|
|
|
21
23
|
Anthropic provides Claude models with best-in-class reasoning and code generation.
|
|
22
24
|
|
|
23
|
-
**Models**: `claude-3-5-sonnet`, `claude-3-opus`, `claude-3-haiku`, `claude-3-5-haiku`
|
|
24
|
-
|
|
25
25
|
### Setup
|
|
26
26
|
|
|
27
27
|
1. Create an account at [Anthropic Console](https://console.anthropic.com)
|
|
@@ -42,8 +42,6 @@ tau --model anthropic/claude-3-5-sonnet -p "Say hello"
|
|
|
42
42
|
|
|
43
43
|
OpenAI provides GPT models optimized for a wide range of tasks.
|
|
44
44
|
|
|
45
|
-
**Models**: `gpt-4`, `gpt-4-turbo`, `gpt-4o`, `gpt-3.5-turbo`
|
|
46
|
-
|
|
47
45
|
### Setup
|
|
48
46
|
|
|
49
47
|
1. Create an account at [OpenAI Platform](https://platform.openai.com)
|
|
@@ -64,8 +62,6 @@ tau --model openai/gpt-4o -p "Say hello"
|
|
|
64
62
|
|
|
65
63
|
Google provides Gemini models with multimodal capabilities.
|
|
66
64
|
|
|
67
|
-
**Models**: `gemini-2.0-flash`, `gemini-1.5-pro`, `gemini-1.5-flash`
|
|
68
|
-
|
|
69
65
|
### Setup
|
|
70
66
|
|
|
71
67
|
1. Visit [Google AI Studio](https://aistudio.google.com)
|
|
@@ -73,7 +69,7 @@ Google provides Gemini models with multimodal capabilities.
|
|
|
73
69
|
3. Set the environment variable:
|
|
74
70
|
|
|
75
71
|
```bash
|
|
76
|
-
export
|
|
72
|
+
export GOOGLE_API_KEY=...
|
|
77
73
|
```
|
|
78
74
|
|
|
79
75
|
### Verify
|
|
@@ -86,8 +82,6 @@ tau --model google/gemini-2.0-flash -p "Say hello"
|
|
|
86
82
|
|
|
87
83
|
Mistral offers efficient open-source-based models.
|
|
88
84
|
|
|
89
|
-
**Models**: `mistral-large`, `mistral-medium`, `mistral-small`
|
|
90
|
-
|
|
91
85
|
### Setup
|
|
92
86
|
|
|
93
87
|
1. Create an account at [Mistral Console](https://console.mistral.ai)
|
|
@@ -108,21 +102,6 @@ tau --model mistral/mistral-large -p "Say hello"
|
|
|
108
102
|
|
|
109
103
|
Fireworks AI provides fast, cost-efficient inference for open-source models including Llama, DeepSeek, Qwen, and Mixtral — with OpenAI-compatible APIs.
|
|
110
104
|
|
|
111
|
-
**Text models**:
|
|
112
|
-
|
|
113
|
-
| Model | Context | Pricing (in/out per M tokens) |
|
|
114
|
-
|-------|---------|-------------------------------|
|
|
115
|
-
| `accounts/fireworks/models/llama-v3p3-70b-instruct` | 131K | $0.90 / $0.90 |
|
|
116
|
-
| `accounts/fireworks/models/llama-v3p1-405b-instruct` | 131K | $3.00 / $3.00 |
|
|
117
|
-
| `accounts/fireworks/models/deepseek-r1` *(thinking)* | 160K | $3.00 / $7.00 |
|
|
118
|
-
| `accounts/fireworks/models/deepseek-v3` | 131K | $0.90 / $0.90 |
|
|
119
|
-
| `accounts/fireworks/models/qwen3-235b-a22b` *(thinking)* | 131K | $0.22 / $0.88 |
|
|
120
|
-
| `accounts/fireworks/models/qwen3-30b-a3b` *(thinking)* | 131K | $0.15 / $0.60 |
|
|
121
|
-
| `accounts/fireworks/models/mixtral-8x22b-instruct` | 65K | $0.90 / $0.90 |
|
|
122
|
-
| `accounts/fireworks/models/gemma2-9b-it` | 8K | $0.20 / $0.20 |
|
|
123
|
-
|
|
124
|
-
**Image models**: Flux 1 Schnell FP8, Flux 1 Dev FP8
|
|
125
|
-
|
|
126
105
|
### Setup
|
|
127
106
|
|
|
128
107
|
1. Create an account at [Fireworks AI](https://fireworks.ai)
|
|
@@ -148,8 +127,6 @@ tau --model fireworks/accounts/fireworks/models/llama-v3p3-70b-instruct -p "Say
|
|
|
148
127
|
|
|
149
128
|
Run open-source models locally without API keys or internet.
|
|
150
129
|
|
|
151
|
-
**Models**: `llama2`, `mistral`, `neural-chat`, `qwen3.5:cloud` (262K context, thinking), and [others](https://ollama.ai/library)
|
|
152
|
-
|
|
153
130
|
### Setup
|
|
154
131
|
|
|
155
132
|
1. Install [Ollama](https://ollama.ai)
|
|
@@ -165,11 +142,7 @@ ollama pull mistral
|
|
|
165
142
|
ollama serve
|
|
166
143
|
```
|
|
167
144
|
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
```bash
|
|
171
|
-
export OLLAMA_BASE_URL=http://localhost:11434
|
|
172
|
-
```
|
|
145
|
+
Tau connects to `http://localhost:11434` by default.
|
|
173
146
|
|
|
174
147
|
### Verify
|
|
175
148
|
|
|
@@ -177,30 +150,6 @@ export OLLAMA_BASE_URL=http://localhost:11434
|
|
|
177
150
|
tau --model ollama/mistral -p "Say hello"
|
|
178
151
|
```
|
|
179
152
|
|
|
180
|
-
## Azure OpenAI
|
|
181
|
-
|
|
182
|
-
Use OpenAI models hosted on Azure infrastructure.
|
|
183
|
-
|
|
184
|
-
**Models**: Same as OpenAI (gpt-4, gpt-3.5-turbo, etc.)
|
|
185
|
-
|
|
186
|
-
### Setup
|
|
187
|
-
|
|
188
|
-
1. Create an Azure OpenAI resource in the Azure Portal
|
|
189
|
-
2. Deploy a model (e.g., gpt-4)
|
|
190
|
-
3. Set environment variables:
|
|
191
|
-
|
|
192
|
-
```bash
|
|
193
|
-
export AZURE_OPENAI_API_KEY=...
|
|
194
|
-
export AZURE_OPENAI_BASE_URL=https://your-resource.openai.azure.com
|
|
195
|
-
export AZURE_OPENAI_DEPLOYMENT_NAME=gpt-4
|
|
196
|
-
```
|
|
197
|
-
|
|
198
|
-
### Verify
|
|
199
|
-
|
|
200
|
-
```bash
|
|
201
|
-
tau --model azure/gpt-4 -p "Say hello"
|
|
202
|
-
```
|
|
203
|
-
|
|
204
153
|
## Switching Providers
|
|
205
154
|
|
|
206
155
|
### Command Line
|
|
@@ -4,7 +4,7 @@ This page covers installation and authentication setup for Tau and its inference
|
|
|
4
4
|
|
|
5
5
|
## Prerequisites
|
|
6
6
|
|
|
7
|
-
- Python 3.
|
|
7
|
+
- Python 3.12 or higher
|
|
8
8
|
- pip, uv, or another Python package manager
|
|
9
9
|
- An API key or subscription from at least one inference provider
|
|
10
10
|
|
|
@@ -60,7 +60,7 @@ Get your API key from [OpenAI's platform](https://platform.openai.com/account/ap
|
|
|
60
60
|
### Google Gemini
|
|
61
61
|
|
|
62
62
|
```bash
|
|
63
|
-
export
|
|
63
|
+
export GOOGLE_API_KEY=...
|
|
64
64
|
```
|
|
65
65
|
|
|
66
66
|
Create a key at [Google AI Studio](https://aistudio.google.com).
|
|
@@ -75,13 +75,8 @@ Get your key from [Mistral's console](https://console.mistral.ai).
|
|
|
75
75
|
|
|
76
76
|
### Ollama (Local)
|
|
77
77
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
```bash
|
|
81
|
-
export OLLAMA_BASE_URL=http://localhost:11434
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
Ollama does not require an API key.
|
|
78
|
+
Ollama uses `http://localhost:11434` by default and does not require an API
|
|
79
|
+
key. Configure a different endpoint through a provider extension.
|
|
85
80
|
|
|
86
81
|
## Configure Authentication
|
|
87
82
|
|
|
@@ -103,7 +98,7 @@ Store credentials in `~/.tau/auth.json`:
|
|
|
103
98
|
{
|
|
104
99
|
"anthropic": { "type": "api_key", "key": "sk-ant-..." },
|
|
105
100
|
"openai": { "type": "api_key", "key": "sk-..." },
|
|
106
|
-
"
|
|
101
|
+
"google": { "type": "api_key", "key": "..." }
|
|
107
102
|
}
|
|
108
103
|
```
|
|
109
104
|
|
|
@@ -182,7 +177,7 @@ If using Ollama, ensure the service is running:
|
|
|
182
177
|
ollama serve
|
|
183
178
|
```
|
|
184
179
|
|
|
185
|
-
|
|
180
|
+
Tau currently expects the service at `http://localhost:11434`.
|
|
186
181
|
|
|
187
182
|
## Next Steps
|
|
188
183
|
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
|
|
28
28
|
| Shortcut | Action |
|
|
29
29
|
|----------|--------|
|
|
30
|
-
| Escape | Abort
|
|
30
|
+
| Escape | Abort the active operation; double-press while idle to clear TUI messages |
|
|
31
31
|
| Ctrl+C | Abort turn; double-press to quit |
|
|
32
32
|
| Ctrl+D | Quit (on empty input) |
|
|
33
33
|
| Ctrl+O | Toggle expand/collapse for thinking and tool-result blocks |
|
|
@@ -56,11 +56,10 @@ Pass a `KeyMap` to `App.create()` at startup:
|
|
|
56
56
|
from tau.tui import KeyMap
|
|
57
57
|
|
|
58
58
|
overrides: KeyMap = {
|
|
59
|
-
"
|
|
60
|
-
"
|
|
61
|
-
"
|
|
62
|
-
"
|
|
63
|
-
"app.invocations.toggle": ["ctrl+e"],
|
|
59
|
+
"app.details.toggle": ["ctrl+t"],
|
|
60
|
+
"app.invocations.toggle": ["ctrl+r"],
|
|
61
|
+
"tui.select.up": ["up", "ctrl+k"],
|
|
62
|
+
"tui.select.down": ["down", "ctrl+j"],
|
|
64
63
|
}
|
|
65
64
|
|
|
66
65
|
app = await App.create(runtime, keybindings=overrides)
|
|
@@ -81,7 +80,7 @@ A `KeyMap` is `dict[str, list[str]]` — action name → list of key combos that
|
|
|
81
80
|
| `app.details.toggle` | `ctrl+o` | Toggle thinking and tool-result previews |
|
|
82
81
|
| `app.invocations.toggle` | `ctrl+e` | Toggle template and skill blocks |
|
|
83
82
|
| `tui.app.quit` | `ctrl+c`, `ctrl+d` | Quit tau |
|
|
84
|
-
| `tui.app.abort` | `ctrl+c` | Abort the current turn |
|
|
83
|
+
| `tui.app.abort` | `escape`, `ctrl+c` | Abort the current turn |
|
|
85
84
|
| `tui.select.up` | `up`, `ctrl+p` | Move selection up |
|
|
86
85
|
| `tui.select.down` | `down`, `ctrl+n` | Move selection down |
|
|
87
86
|
| `tui.select.page_up` | `page_up` | Move up a page |
|
|
@@ -90,6 +89,20 @@ A `KeyMap` is `dict[str, list[str]]` — action name → list of key combos that
|
|
|
90
89
|
| `tui.select.bottom` | `end` | Jump to bottom |
|
|
91
90
|
| `tui.select.confirm` | `enter`, `tab` | Confirm selection |
|
|
92
91
|
| `tui.select.dismiss` | `escape` | Dismiss picker |
|
|
92
|
+
| `tui.scroll.up` | `page_up` | Scroll messages up one page |
|
|
93
|
+
| `tui.scroll.down` | `page_down` | Scroll messages down one page |
|
|
94
|
+
| `tui.scroll.top` | `home` | Scroll to the first message |
|
|
95
|
+
| `tui.scroll.bottom` | `end` | Scroll to the latest message |
|
|
96
|
+
|
|
97
|
+
The `tui.select.*` actions apply to components built on Tau's reusable
|
|
98
|
+
`SelectList` and to the corresponding navigation operations in specialized
|
|
99
|
+
pickers. A specialized picker may not support every operation; for example, a
|
|
100
|
+
compact autocomplete list only supports up and down.
|
|
101
|
+
|
|
102
|
+
Extension shortcuts are literal key combinations rather than `KeyMap` actions.
|
|
103
|
+
Tau checks them against the effective map and prevents extensions from
|
|
104
|
+
replacing reserved editor and application bindings. See
|
|
105
|
+
[Keyboard shortcuts](extensions.md#keyboard-shortcuts).
|
|
93
106
|
|
|
94
107
|
### Key notation
|
|
95
108
|
|
|
@@ -125,7 +138,10 @@ If a binding doesn't work, choose a different combination.
|
|
|
125
138
|
|
|
126
139
|
## Reloading
|
|
127
140
|
|
|
128
|
-
|
|
141
|
+
`App.create(keybindings=...)` applies overrides at startup. Because these
|
|
142
|
+
overrides are supplied by the embedding application rather than loaded from a
|
|
143
|
+
settings file, `/reload` does not change them. Restart the application with a
|
|
144
|
+
new `KeyMap` to apply different overrides.
|
|
129
145
|
|
|
130
146
|
---
|
|
131
147
|
|