tau-coding-agent 0.5.0__tar.gz → 0.5.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.5.0/tau_coding_agent.egg-info → tau_coding_agent-0.5.2}/PKG-INFO +1 -1
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/docs/architecture.md +11 -3
- tau_coding_agent-0.5.2/docs/creating-tools.md +242 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/docs/docs.json +16 -0
- tau_coding_agent-0.5.2/docs/engine.md +114 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/docs/extensions.md +3 -1
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/docs/index.md +4 -0
- tau_coding_agent-0.5.2/docs/inference.md +229 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/docs/project-structure.md +16 -13
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/docs/python-api.md +3 -1
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/docs/tools.md +14 -3
- tau_coding_agent-0.5.2/docs/tui.md +167 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/pyproject.toml +1 -1
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/agent/service.py +5 -4
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/agent/types.py +5 -13
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/builtins/models/text.py +1 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/builtins/tools/edit.py +1 -1
- tau_coding_agent-0.5.2/tau/builtins/tools/terminal.py +342 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/builtins/tools/utils.py +108 -1
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/engine/__init__.py +16 -8
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/engine/service.py +17 -17
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/engine/types.py +10 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/extensions/context.py +2 -2
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/modes/interactive/agent_hooks.py +6 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/modes/interactive/app.py +6 -1
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/modes/interactive/components/layout.py +11 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/modes/interactive/components/message_list.py +4 -0
- {tau_coding_agent-0.5.0/tau/tui → tau_coding_agent-0.5.2/tau/modes/interactive}/ui_context.py +5 -2
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/modes/rpc/mode.py +10 -5
- tau_coding_agent-0.5.2/tau/tui/__init__.py +134 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/tui/autocomplete.py +34 -7
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/tui/component.py +45 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/tui/components/image.py +13 -3
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/tui/components/spinner.py +8 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/tui/components/text_input.py +8 -1
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/tui/input.py +15 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/tui/markdown.py +3 -8
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/tui/terminal.py +146 -2
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/tui/theme.py +24 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/tui/tui.py +115 -14
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2/tau_coding_agent.egg-info}/PKG-INFO +1 -1
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau_coding_agent.egg-info/SOURCES.txt +8 -1
- tau_coding_agent-0.5.2/tests/test_ask_user_extension.py +46 -0
- tau_coding_agent-0.5.2/tests/test_autocomplete_modifiers.py +52 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_builtin_tools.py +123 -1
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_engine_execution.py +17 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_engine_steering.py +21 -17
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_inference_dialect.py +16 -1
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_text_input.py +17 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_thinking_render.py +21 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_tui_input.py +10 -0
- tau_coding_agent-0.5.2/tests/test_tui_public_api.py +55 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_tui_renderer.py +60 -4
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_tui_theme.py +27 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_ui_context.py +1 -1
- tau_coding_agent-0.5.0/tau/builtins/tools/terminal.py +0 -213
- tau_coding_agent-0.5.0/tau/tui/__init__.py +0 -69
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/LICENSE +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/MANIFEST.in +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/README.md +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/docs/auth.md +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/docs/cli-reference.md +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/docs/development.md +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/docs/extension-settings.md +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/docs/http-proxy.md +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/docs/inference-providers.md +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/docs/installation.md +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/docs/keybindings.md +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/docs/messages.md +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/docs/project-context.md +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/docs/prompts.md +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/docs/quickstart.md +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/docs/sessions.md +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/docs/settings.md +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/docs/skills.md +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/docs/themes.md +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/docs/usage.md +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/setup.cfg +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/__init__.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/agent/__init__.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/agent/prompt/__init__.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/agent/prompt/builder.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/agent/prompt/types.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/auth/manager.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/auth/storage.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/auth/types.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/builtins/__init__.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/builtins/commands/__init__.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/builtins/commands/clear.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/builtins/commands/compact.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/builtins/commands/reload.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/builtins/commands/session.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/builtins/extensions/btw/__init__.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/builtins/extensions/footer/__init__.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/builtins/extensions/footer/git.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/builtins/extensions/footer/model.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/builtins/extensions/footer/utils.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/builtins/extensions/header/__init__.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/builtins/extensions/watch/__init__.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/builtins/models/__init__.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/builtins/models/audio.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/builtins/models/image.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/builtins/models/video.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/builtins/prompts/commit.md +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/builtins/prompts/docs.md +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/builtins/prompts/explain.md +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/builtins/prompts/fix.md +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/builtins/prompts/refactor.md +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/builtins/prompts/review.md +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/builtins/prompts/test.md +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/builtins/providers/__init__.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/builtins/providers/audio.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/builtins/providers/image.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/builtins/providers/text.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/builtins/providers/video.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/builtins/skills/code-review/SKILL.md +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/builtins/skills/debug/SKILL.md +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/builtins/skills/git-commit/SKILL.md +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/builtins/skills/skill-creator/LICENSE.txt +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/builtins/skills/skill-creator/SKILL.md +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/builtins/themes/dark.yaml +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/builtins/themes/light.yaml +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/builtins/tools/__init__.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/builtins/tools/glob.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/builtins/tools/grep.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/builtins/tools/ls.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/builtins/tools/read.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/builtins/tools/write.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/commands/__init__.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/commands/registry.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/commands/types.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/console/__init__.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/console/cli.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/console/commands/__init__.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/console/commands/auth.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/console/commands/packages.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/console/commands/update.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/core/__init__.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/core/registry.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/extensions/__init__.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/extensions/api.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/extensions/loader.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/extensions/runtime.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/extensions/settings.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/hooks/__init__.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/hooks/engine.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/hooks/inference.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/hooks/runtime.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/hooks/service.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/hooks/session.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/hooks/tui.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/hooks/types.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/inference/__init__.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/inference/api/__init__.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/inference/api/audio/__init__.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/inference/api/audio/base.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/inference/api/audio/builtins.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/inference/api/audio/elevenlabs_audio.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/inference/api/audio/gemini_audio.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/inference/api/audio/openai_audio.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/inference/api/audio/registry.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/inference/api/audio/sarvam_audio.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/inference/api/audio/service.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/inference/api/audio/utils.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/inference/api/availability.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/inference/api/image/__init__.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/inference/api/image/base.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/inference/api/image/builtins.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/inference/api/image/gemini_image.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/inference/api/image/openai_image.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/inference/api/image/openrouter.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/inference/api/image/registry.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/inference/api/image/service.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/inference/api/registry.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/inference/api/text/__init__.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/inference/api/text/anthropic_claude_code.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/inference/api/text/anthropic_messages.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/inference/api/text/anthropic_vertex.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/inference/api/text/base.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/inference/api/text/builtins.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/inference/api/text/dialect.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/inference/api/text/gemini_generate.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/inference/api/text/github_copilot_chat.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/inference/api/text/google_antigravity.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/inference/api/text/google_vertex.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/inference/api/text/mistral_chat.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/inference/api/text/ollama_chat.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/inference/api/text/openai_codex_responses.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/inference/api/text/openai_completions.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/inference/api/text/openai_responses.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/inference/api/text/openai_vertex.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/inference/api/text/registry.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/inference/api/text/service.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/inference/api/text/types.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/inference/api/text/utils.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/inference/api/video/__init__.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/inference/api/video/base.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/inference/api/video/builtins.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/inference/api/video/fal_video.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/inference/api/video/openrouter_video.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/inference/api/video/registry.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/inference/api/video/service.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/inference/api/video/zai_video.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/inference/model/__init__.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/inference/model/registry.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/inference/model/types.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/inference/provider/__init__.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/inference/provider/oauth/__init__.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/inference/provider/oauth/anthropic_claude_code.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/inference/provider/oauth/github_copilot.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/inference/provider/oauth/google_antigravity.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/inference/provider/oauth/openai_codex.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/inference/provider/oauth/pkce.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/inference/provider/oauth/types.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/inference/provider/oauth/utils.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/inference/provider/registry.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/inference/provider/types.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/inference/types.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/inference/utils.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/message/__init__.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/message/types.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/message/utils.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/modes/__init__.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/modes/interactive/__init__.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/modes/interactive/commands/__init__.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/modes/interactive/commands/appearance.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/modes/interactive/commands/auth.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/modes/interactive/commands/context.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/modes/interactive/commands/extensions.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/modes/interactive/commands/misc.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/modes/interactive/commands/model.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/modes/interactive/commands/session.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/modes/interactive/components/__init__.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/modes/interactive/components/command_palette.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/modes/interactive/components/config_selector.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/modes/interactive/components/extension_selector.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/modes/interactive/components/file_picker.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/modes/interactive/components/model_selector.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/modes/interactive/components/oauth_selector.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/modes/interactive/components/overlays.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/modes/interactive/components/selector_controller.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/modes/interactive/components/session_selector.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/modes/interactive/components/settings_selector.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/modes/interactive/components/theme_selector.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/modes/interactive/components/thinking_selector.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/modes/interactive/components/tree_selector.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/modes/interactive/components/trust_screen.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/modes/interactive/components/voice_selector.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/modes/interactive/input_handler.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/modes/print/__init__.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/modes/rpc/__init__.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/modes/rpc/types.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/packages/__init__.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/packages/manager.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/packages/types.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/packages/utils.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/prompts/expand.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/prompts/loader.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/prompts/registry.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/prompts/types.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/resources/__init__.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/resources/loader.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/resources/types.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/runtime/dependencies.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/runtime/service.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/runtime/types.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/session/branch_summarization.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/session/compaction.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/session/manager.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/session/types.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/session/utils.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/settings/manager.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/settings/paths.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/settings/storage.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/settings/types.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/settings/utils.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/skills/loader.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/skills/registry.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/skills/types.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/themes/loader.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/themes/registry.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/themes/types.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/tool/__init__.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/tool/registry.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/tool/render.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/tool/types.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/trust/__init__.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/trust/manager.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/trust/types.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/trust/utils.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/tui/components/__init__.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/tui/components/box.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/tui/components/editor.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/tui/components/select_list.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/tui/keybinding_hints.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/tui/utils.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/utils/__init__.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/utils/http_proxy.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/utils/image_processing.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/utils/secrets.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/utils/telemetry.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau/utils/version_check.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau_coding_agent.egg-info/dependency_links.txt +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau_coding_agent.egg-info/entry_points.txt +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau_coding_agent.egg-info/requires.txt +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tau_coding_agent.egg-info/top_level.txt +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_agent_compaction.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_agent_prompt.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_agent_types.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_ansi.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_auth_command.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_auth_manager.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_auth_storage.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_branch_navigation.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_branch_summarization.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_builtin_watch.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_cli_inputs.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_command_execution_policy.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_command_registry.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_compaction.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_diff.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_editor_protocol.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_engine_types.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_escape_behavior.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_extension_api.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_extension_lifecycle.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_footer_model.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_footer_utils.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_fuzzy.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_http_proxy.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_image_processing.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_inference_api_text_utils.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_inference_error_utils.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_inference_types.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_inference_utils.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_keybindings.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_markdown.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_message_types.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_message_utils.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_model_availability.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_model_command.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_model_registry.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_model_selector_modal.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_model_types.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_oauth_utils.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_package_resources.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_packages_utils.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_peer_extension.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_pkce.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_prompts_expand.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_prompts_loader.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_prompts_registry.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_provider_registry.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_resource_loader.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_rpc_mode.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_runtime_sdk.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_secrets.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_selector_controller.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_session_manager.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_session_trust_persist.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_session_types.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_session_utils.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_settings_manager.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_settings_paths.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_settings_storage.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_settings_utils.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_skills_loader.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_skills_registry.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_subagents_extension.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_telemetry.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_text_llm_invoke.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_theme_loader.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_themes_registry.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_tool_registry.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_tool_render.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_trust_manager.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_trust_utils.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_tui_capabilities.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_tui_layout_sizing.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_tui_select_list.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_tui_utils.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_version_check.py +0 -0
- {tau_coding_agent-0.5.0 → tau_coding_agent-0.5.2}/tests/test_voice_selector.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: tau-coding-agent
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.2
|
|
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
|
|
@@ -61,7 +61,7 @@ User input flows through these stages:
|
|
|
61
61
|
| `console/` | CLI entry point, argument parsing |
|
|
62
62
|
| `runtime/` | Orchestrates agent, session, engine, extensions |
|
|
63
63
|
| `agent/` | Processes message turns, calls inference |
|
|
64
|
-
| `engine/` |
|
|
64
|
+
| `engine/` | Standalone inference and tool-execution loop |
|
|
65
65
|
| `inference/` | Unified interface to LLM providers |
|
|
66
66
|
|
|
67
67
|
### Data & State
|
|
@@ -79,7 +79,7 @@ User input flows through these stages:
|
|
|
79
79
|
|
|
80
80
|
| Module | Purpose |
|
|
81
81
|
|--------|---------|
|
|
82
|
-
| `tui/` |
|
|
82
|
+
| `tui/` | Standalone terminal rendering and component framework |
|
|
83
83
|
| `extensions/` | Plugin system API |
|
|
84
84
|
| `hooks/` | Event system for extensions |
|
|
85
85
|
| `commands/` | Slash command registry |
|
|
@@ -141,6 +141,9 @@ Each agent turn follows this sequence:
|
|
|
141
141
|
TUI overlays participate in focus lifecycle. Hiding or closing a capturing
|
|
142
142
|
overlay restores the next visible overlay or its previous focus target.
|
|
143
143
|
Components exposing `dispose()` are disposed when their overlay closes.
|
|
144
|
+
The reusable renderer, terminal, input, and component APIs are documented in
|
|
145
|
+
[Terminal UI](tui.md); runtime-aware composition lives in
|
|
146
|
+
`modes/interactive/`.
|
|
144
147
|
|
|
145
148
|
Slash commands declare whether they require an idle agent. Idle-only commands
|
|
146
149
|
are deferred until the current turn settles; UI-only and read-only commands may
|
|
@@ -204,7 +207,9 @@ class BaseAPI:
|
|
|
204
207
|
...
|
|
205
208
|
```
|
|
206
209
|
|
|
207
|
-
The inference module handles provider-specific details (API keys, endpoints,
|
|
210
|
+
The inference module handles provider-specific details (API keys, endpoints,
|
|
211
|
+
format conversions) and can also be used independently of the agent runtime.
|
|
212
|
+
See [Inference](inference.md) for its package boundaries and public clients.
|
|
208
213
|
|
|
209
214
|
## Tool Execution Model
|
|
210
215
|
|
|
@@ -223,6 +228,9 @@ Built-in tools (terminal, read, write, edit, glob, grep, ls) are enabled by defa
|
|
|
223
228
|
`RuntimeConfig` can allow or exclude tools by name. Custom tools are registered
|
|
224
229
|
via extensions or passed directly to the runtime.
|
|
225
230
|
|
|
231
|
+
The engine can also be embedded without the session-aware agent or runtime.
|
|
232
|
+
See [Engine](engine.md) for its public API and dependency boundary.
|
|
233
|
+
|
|
226
234
|
Programmatic runtimes can replace constructed services through
|
|
227
235
|
`RuntimeDependencies`. Typed factories cover settings, LLM/model/auth wiring,
|
|
228
236
|
session storage, hooks, and the tool registry. Session-bound factories run
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
# Creating Tools
|
|
2
|
+
|
|
3
|
+
Tools are typed asynchronous operations that a model can request. A tool
|
|
4
|
+
defines its name, description, Pydantic input schema, execution policy, and
|
|
5
|
+
result handling.
|
|
6
|
+
|
|
7
|
+
Use this guide to implement and test a tool. See [Tools](tools.md) for the
|
|
8
|
+
built-in tool reference and execution model.
|
|
9
|
+
|
|
10
|
+
## Implement a Tool
|
|
11
|
+
|
|
12
|
+
This example creates a read-only word-count tool:
|
|
13
|
+
|
|
14
|
+
```python
|
|
15
|
+
from __future__ import annotations
|
|
16
|
+
|
|
17
|
+
from pathlib import Path
|
|
18
|
+
|
|
19
|
+
from pydantic import BaseModel, Field
|
|
20
|
+
|
|
21
|
+
from tau.tool.types import (
|
|
22
|
+
AbortSignal,
|
|
23
|
+
Tool,
|
|
24
|
+
ToolContext,
|
|
25
|
+
ToolExecutionMode,
|
|
26
|
+
ToolExecutionUpdateCallback,
|
|
27
|
+
ToolInvocation,
|
|
28
|
+
ToolKind,
|
|
29
|
+
ToolResult,
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
class WordCountParams(BaseModel):
|
|
34
|
+
"""Validated parameters for the word-count tool."""
|
|
35
|
+
|
|
36
|
+
path: str = Field(description="Text file path, relative to the working directory.")
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
class WordCountTool(Tool):
|
|
40
|
+
"""Count words in a UTF-8 text file."""
|
|
41
|
+
|
|
42
|
+
def __init__(self) -> None:
|
|
43
|
+
super().__init__(
|
|
44
|
+
name="word_count",
|
|
45
|
+
description="Count the words in a UTF-8 text file.",
|
|
46
|
+
schema=WordCountParams,
|
|
47
|
+
kind=ToolKind.Read,
|
|
48
|
+
execution_mode=ToolExecutionMode.Parallel,
|
|
49
|
+
)
|
|
50
|
+
|
|
51
|
+
async def execute(
|
|
52
|
+
self,
|
|
53
|
+
invocation: ToolInvocation,
|
|
54
|
+
tool_execution_update_callback: ToolExecutionUpdateCallback | None = None,
|
|
55
|
+
signal: AbortSignal | None = None,
|
|
56
|
+
context: ToolContext | None = None,
|
|
57
|
+
) -> ToolResult:
|
|
58
|
+
params = WordCountParams.model_validate(invocation.params)
|
|
59
|
+
|
|
60
|
+
if signal is not None and signal.is_set():
|
|
61
|
+
return ToolResult.error(invocation.id, "Word count cancelled.")
|
|
62
|
+
|
|
63
|
+
base = context.cwd if context is not None and context.cwd is not None else Path.cwd()
|
|
64
|
+
path = Path(params.path)
|
|
65
|
+
if not path.is_absolute():
|
|
66
|
+
path = base / path
|
|
67
|
+
|
|
68
|
+
try:
|
|
69
|
+
content = path.read_text(encoding="utf-8")
|
|
70
|
+
except OSError as error:
|
|
71
|
+
return ToolResult.error(invocation.id, f"Cannot read {path}: {error}")
|
|
72
|
+
|
|
73
|
+
count = len(content.split())
|
|
74
|
+
return ToolResult.ok(
|
|
75
|
+
invocation.id,
|
|
76
|
+
f"{path}: {count} words",
|
|
77
|
+
metadata={"path": str(path), "word_count": count},
|
|
78
|
+
)
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
The engine validates `invocation.params` against `schema` before execution.
|
|
82
|
+
Validating again inside `execute()` produces a typed parameter object and keeps
|
|
83
|
+
the tool safe when called directly in tests.
|
|
84
|
+
|
|
85
|
+
## Define Clear Metadata
|
|
86
|
+
|
|
87
|
+
Constructor fields affect both model behavior and execution:
|
|
88
|
+
|
|
89
|
+
| Field | Guidance |
|
|
90
|
+
|-------|----------|
|
|
91
|
+
| `name` | Use a stable lowercase identifier with underscores |
|
|
92
|
+
| `description` | State what the tool does and when it should be used |
|
|
93
|
+
| `schema` | Use Pydantic fields with precise descriptions and constraints |
|
|
94
|
+
| `kind` | Classify the side effect as read, edit, write, execute, or web |
|
|
95
|
+
| `execution_mode` | Use parallel only when concurrent calls are safe |
|
|
96
|
+
|
|
97
|
+
Tools that mutate files, launch processes, or modify external state should
|
|
98
|
+
normally use `ToolExecutionMode.Sequential`. Read-only operations may use
|
|
99
|
+
`Parallel` when they do not share mutable state.
|
|
100
|
+
|
|
101
|
+
## Return Results
|
|
102
|
+
|
|
103
|
+
Return model-facing text with one of the result constructors:
|
|
104
|
+
|
|
105
|
+
```python
|
|
106
|
+
return ToolResult.ok(invocation.id, "Completed", metadata={"items": 3})
|
|
107
|
+
return ToolResult.error(invocation.id, "The requested file does not exist")
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
Keep `content` concise and actionable. Use `metadata` for structured facts
|
|
111
|
+
needed by hooks or renderers, not for duplicating the complete text result.
|
|
112
|
+
|
|
113
|
+
For Markdown rendering of a successful result:
|
|
114
|
+
|
|
115
|
+
```python
|
|
116
|
+
return ToolResult.ok(
|
|
117
|
+
invocation.id,
|
|
118
|
+
"## Results\n\n- First\n- Second",
|
|
119
|
+
metadata={"_render_format": "markdown"},
|
|
120
|
+
)
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
## Use Runtime Context
|
|
124
|
+
|
|
125
|
+
`ToolContext` provides optional runtime services:
|
|
126
|
+
|
|
127
|
+
| Attribute | Value |
|
|
128
|
+
|-----------|-------|
|
|
129
|
+
| `cwd` | Current engine working directory |
|
|
130
|
+
| `llm` | Active text inference client |
|
|
131
|
+
| `settings` | Active settings manager, when available |
|
|
132
|
+
|
|
133
|
+
Treat every attribute as optional because tools can be unit-tested or called
|
|
134
|
+
outside the complete runtime.
|
|
135
|
+
|
|
136
|
+
Long-running tools should check `signal.is_set()` at safe cancellation points.
|
|
137
|
+
Tools that produce incremental output can call
|
|
138
|
+
`tool_execution_update_callback` with partial `ToolResult` values.
|
|
139
|
+
High-frequency producers should throttle updates so they do not flood engine
|
|
140
|
+
events or terminal renders. Emit an initial update when work begins and a final
|
|
141
|
+
update matching the returned result.
|
|
142
|
+
|
|
143
|
+
## Register the Tool
|
|
144
|
+
|
|
145
|
+
### Project or Global Extension
|
|
146
|
+
|
|
147
|
+
Create `.tau/extensions/word_count.py` for one project, or
|
|
148
|
+
`~/.tau/extensions/word_count.py` for all projects:
|
|
149
|
+
|
|
150
|
+
```python
|
|
151
|
+
from tau.extensions import ExtensionAPI
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
def register(tau: ExtensionAPI) -> None:
|
|
155
|
+
tau.register_tool(WordCountTool())
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
Run `/reload` after changing an extension.
|
|
159
|
+
|
|
160
|
+
### Python Runtime
|
|
161
|
+
|
|
162
|
+
Pass tool instances through `RuntimeConfig`:
|
|
163
|
+
|
|
164
|
+
```python
|
|
165
|
+
from pathlib import Path
|
|
166
|
+
|
|
167
|
+
from tau.runtime.types import RuntimeConfig
|
|
168
|
+
|
|
169
|
+
config = RuntimeConfig(
|
|
170
|
+
cwd=Path.cwd(),
|
|
171
|
+
tools=[WordCountTool()],
|
|
172
|
+
)
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
### Standalone Engine
|
|
176
|
+
|
|
177
|
+
Supply tools to both `Engine` and `EngineContext`:
|
|
178
|
+
|
|
179
|
+
```python
|
|
180
|
+
from pathlib import Path
|
|
181
|
+
|
|
182
|
+
from tau.engine import Engine, EngineContext
|
|
183
|
+
from tau.message.types import UserMessage
|
|
184
|
+
|
|
185
|
+
tools = [WordCountTool()]
|
|
186
|
+
engine = Engine(cwd=Path.cwd(), llm=llm, tools=tools)
|
|
187
|
+
|
|
188
|
+
await engine.run(
|
|
189
|
+
EngineContext(
|
|
190
|
+
system_prompt="Use tools when they answer the request.",
|
|
191
|
+
messages=[UserMessage.from_text("Count the words in README.md")],
|
|
192
|
+
tools=tools,
|
|
193
|
+
)
|
|
194
|
+
)
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
See [Engine](engine.md) for standalone lifecycle and event handling.
|
|
198
|
+
|
|
199
|
+
## Test the Tool
|
|
200
|
+
|
|
201
|
+
Test execution without making an inference request:
|
|
202
|
+
|
|
203
|
+
```python
|
|
204
|
+
from pathlib import Path
|
|
205
|
+
|
|
206
|
+
import pytest
|
|
207
|
+
|
|
208
|
+
from tau.tool.types import ToolContext, ToolInvocation
|
|
209
|
+
|
|
210
|
+
|
|
211
|
+
@pytest.mark.asyncio
|
|
212
|
+
async def test_word_count(tmp_path: Path) -> None:
|
|
213
|
+
source = tmp_path / "sample.txt"
|
|
214
|
+
source.write_text("one two three", encoding="utf-8")
|
|
215
|
+
tool = WordCountTool()
|
|
216
|
+
|
|
217
|
+
result = await tool.execute(
|
|
218
|
+
ToolInvocation(
|
|
219
|
+
id="call-1",
|
|
220
|
+
name=tool.name,
|
|
221
|
+
cwd=tmp_path,
|
|
222
|
+
params={"path": "sample.txt"},
|
|
223
|
+
),
|
|
224
|
+
context=ToolContext(cwd=tmp_path),
|
|
225
|
+
)
|
|
226
|
+
|
|
227
|
+
assert not result.is_error
|
|
228
|
+
assert result.metadata["word_count"] == 3
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
Also test invalid parameters, missing resources, cancellation, and concurrent
|
|
232
|
+
execution when the tool declares parallel safety.
|
|
233
|
+
|
|
234
|
+
## Checklist
|
|
235
|
+
|
|
236
|
+
- Parameter types and constraints are expressed in the Pydantic schema.
|
|
237
|
+
- The description explains when the model should call the tool.
|
|
238
|
+
- Side effects match `ToolKind` and `ToolExecutionMode`.
|
|
239
|
+
- Errors are returned as `ToolResult.error`, not leaked as raw tracebacks.
|
|
240
|
+
- Paths are resolved against `ToolContext.cwd`.
|
|
241
|
+
- Cancellation is checked during long operations.
|
|
242
|
+
- Unit tests cover success and failure paths.
|
|
@@ -28,6 +28,18 @@
|
|
|
28
28
|
{
|
|
29
29
|
"title": "Core Concepts",
|
|
30
30
|
"items": [
|
|
31
|
+
{
|
|
32
|
+
"title": "Inference",
|
|
33
|
+
"path": "inference.md"
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"title": "Engine",
|
|
37
|
+
"path": "engine.md"
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"title": "Terminal UI",
|
|
41
|
+
"path": "tui.md"
|
|
42
|
+
},
|
|
31
43
|
{
|
|
32
44
|
"title": "Inference Providers",
|
|
33
45
|
"path": "inference-providers.md"
|
|
@@ -44,6 +56,10 @@
|
|
|
44
56
|
"title": "Tools",
|
|
45
57
|
"path": "tools.md"
|
|
46
58
|
},
|
|
59
|
+
{
|
|
60
|
+
"title": "Creating Tools",
|
|
61
|
+
"path": "creating-tools.md"
|
|
62
|
+
},
|
|
47
63
|
{
|
|
48
64
|
"title": "Project Context",
|
|
49
65
|
"path": "project-context.md"
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
# Engine
|
|
2
|
+
|
|
3
|
+
`tau.engine` is Tau's standalone text-inference and tool-execution loop. It can
|
|
4
|
+
be embedded directly when an application needs agentic model/tool iteration
|
|
5
|
+
without Tau's sessions, compaction, extensions, runtime lifecycle, or terminal
|
|
6
|
+
UI.
|
|
7
|
+
|
|
8
|
+
Use [Inference](inference.md) instead when the application only needs a single
|
|
9
|
+
model request and will manage tool calls itself. Use the
|
|
10
|
+
[Python API](python-api.md) when the application needs the complete Tau runtime.
|
|
11
|
+
|
|
12
|
+
## Responsibilities
|
|
13
|
+
|
|
14
|
+
The engine:
|
|
15
|
+
|
|
16
|
+
- streams normalized text inference events
|
|
17
|
+
- accumulates assistant messages
|
|
18
|
+
- validates and executes requested tools
|
|
19
|
+
- runs safe tool batches sequentially or concurrently
|
|
20
|
+
- emits message, turn, tool, and engine lifecycle events
|
|
21
|
+
- supports steering, follow-up messages, continuation, and cancellation
|
|
22
|
+
|
|
23
|
+
The engine does not persist messages, compact context, discover extensions,
|
|
24
|
+
construct the application system prompt, or manage the user interface.
|
|
25
|
+
`tau.agent` owns session-aware orchestration around the engine, while
|
|
26
|
+
`tau.runtime` constructs and connects the full application.
|
|
27
|
+
|
|
28
|
+
## Public API
|
|
29
|
+
|
|
30
|
+
| Type | Purpose |
|
|
31
|
+
|------|---------|
|
|
32
|
+
| `Engine` | Streaming inference and tool-execution service |
|
|
33
|
+
| `EngineContext` | System prompt, message history, and tools for one run |
|
|
34
|
+
| `EngineOptions` | Execution strategy and lifecycle callbacks |
|
|
35
|
+
| `EngineState` | Observable mutable execution state |
|
|
36
|
+
|
|
37
|
+
The former `Agent` and `AgentState` names remain compatibility aliases, and
|
|
38
|
+
`AgentOptions` is the descriptive compatibility name for `EngineOptions`.
|
|
39
|
+
New code should use the explicit `Engine` names.
|
|
40
|
+
|
|
41
|
+
## Basic Example
|
|
42
|
+
|
|
43
|
+
```python
|
|
44
|
+
import asyncio
|
|
45
|
+
from pathlib import Path
|
|
46
|
+
|
|
47
|
+
from tau.engine import Engine, EngineContext, MessageEndEvent
|
|
48
|
+
from tau.inference.api.text.service import TextLLM
|
|
49
|
+
from tau.message.types import UserMessage
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
async def main() -> None:
|
|
53
|
+
llm = TextLLM("gpt-4o")
|
|
54
|
+
engine = Engine(cwd=Path.cwd(), llm=llm, tools=[])
|
|
55
|
+
|
|
56
|
+
def print_completed_message(event: object) -> None:
|
|
57
|
+
if isinstance(event, MessageEndEvent):
|
|
58
|
+
print(event.message)
|
|
59
|
+
|
|
60
|
+
await engine.subscribe(print_completed_message)
|
|
61
|
+
await engine.run(
|
|
62
|
+
EngineContext(
|
|
63
|
+
system_prompt="Answer concisely.",
|
|
64
|
+
messages=[UserMessage.from_text("What does an execution engine do?")],
|
|
65
|
+
)
|
|
66
|
+
)
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
asyncio.run(main())
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
Configure the model provider before running the example. See
|
|
73
|
+
[Inference Providers](inference-providers.md).
|
|
74
|
+
|
|
75
|
+
## Supplying Tools
|
|
76
|
+
|
|
77
|
+
Pass the same tool objects to both the engine and the run context:
|
|
78
|
+
|
|
79
|
+
```python
|
|
80
|
+
tools = [read_tool, terminal_tool]
|
|
81
|
+
engine = Engine(cwd=Path.cwd(), llm=llm, tools=tools)
|
|
82
|
+
|
|
83
|
+
await engine.run(
|
|
84
|
+
EngineContext(
|
|
85
|
+
system_prompt="Use tools when needed.",
|
|
86
|
+
messages=[UserMessage.from_text("Inspect this project.")],
|
|
87
|
+
tools=tools,
|
|
88
|
+
)
|
|
89
|
+
)
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
Tools declare their own execution safety. A batch runs concurrently only when
|
|
93
|
+
every tool in that batch permits parallel execution; otherwise source order is
|
|
94
|
+
preserved.
|
|
95
|
+
|
|
96
|
+
## Lifecycle Control
|
|
97
|
+
|
|
98
|
+
- `subscribe(handler)` observes engine events and returns an unsubscribe
|
|
99
|
+
callback.
|
|
100
|
+
- `steer(message)` injects guidance during an active tool loop.
|
|
101
|
+
- `follow_up(message)` queues another user message after a natural stop.
|
|
102
|
+
- `abort()` cancels the active stream at the next safe boundary.
|
|
103
|
+
- `run_continue()` resumes from the engine's current in-memory history.
|
|
104
|
+
- `wait_for_idle()` waits until the active loop exits.
|
|
105
|
+
|
|
106
|
+
Engine history is in memory only. Applications using the engine directly are
|
|
107
|
+
responsible for durable storage and for constructing the next
|
|
108
|
+
`EngineContext`.
|
|
109
|
+
|
|
110
|
+
## Dependency Boundary
|
|
111
|
+
|
|
112
|
+
`tau.engine` depends on inference, messages, tools, hooks, and optional
|
|
113
|
+
settings. It must not import session, extension, TUI, runtime, or agent
|
|
114
|
+
services. This keeps the engine independently testable and embeddable.
|
|
@@ -130,6 +130,8 @@ async def register(tau):
|
|
|
130
130
|
## Tools
|
|
131
131
|
|
|
132
132
|
Import from `tau.tool.types`. Use a Pydantic `BaseModel` for the parameter schema.
|
|
133
|
+
For a focused walkthrough covering implementation, registration, and testing,
|
|
134
|
+
see [Creating Tools](creating-tools.md).
|
|
133
135
|
|
|
134
136
|
```python
|
|
135
137
|
from pydantic import BaseModel, Field
|
|
@@ -1188,7 +1190,7 @@ def my_footer(tui, theme):
|
|
|
1188
1190
|
return StaticComponent([f" {theme.primary}Custom footer{RESET} "])
|
|
1189
1191
|
|
|
1190
1192
|
# With TUI + theme + live data (recommended)
|
|
1191
|
-
from tau.
|
|
1193
|
+
from tau.modes.interactive.ui_context import FooterData
|
|
1192
1194
|
|
|
1193
1195
|
def my_footer(tui, theme, data: FooterData):
|
|
1194
1196
|
branch = data.git_branch or "detached"
|
|
@@ -23,10 +23,14 @@ Tau allows you to:
|
|
|
23
23
|
|
|
24
24
|
## Core Concepts
|
|
25
25
|
|
|
26
|
+
- [Inference](inference.md) - Standalone inference clients, types, and architecture
|
|
27
|
+
- [Engine](engine.md) - Standalone inference and tool-execution loop
|
|
28
|
+
- [Terminal UI](tui.md) - Standalone terminal rendering and component framework
|
|
26
29
|
- [Messages & Context](messages.md) - How messages flow and context is managed
|
|
27
30
|
- [Sessions](sessions.md) - Session persistence, branching, compaction, JSONL format
|
|
28
31
|
- [Inference Providers](inference-providers.md) - Supported LLMs and provider setup
|
|
29
32
|
- [Tools](tools.md) - Tool registry, built-in tools, execution model
|
|
33
|
+
- [Creating Tools](creating-tools.md) - Implement, register, and test custom tools
|
|
30
34
|
- [Project Context Files](project-context.md) - Repository-specific agent instructions
|
|
31
35
|
- [CLI Reference](cli-reference.md) - All command-line options and run modes
|
|
32
36
|
|