tau-coding-agent 0.4.5__tar.gz → 0.4.7__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.5/tau_coding_agent.egg-info → tau_coding_agent-0.4.7}/PKG-INFO +2 -1
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/docs/architecture.md +33 -2
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/docs/cli-reference.md +7 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/docs/docs.json +4 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/docs/extensions.md +76 -2
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/docs/index.md +1 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/docs/messages.md +16 -9
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/docs/project-context.md +20 -13
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/docs/project-structure.md +19 -6
- tau_coding_agent-0.4.7/docs/python-api.md +526 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/docs/settings.md +16 -4
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/docs/tools.md +34 -18
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/docs/usage.md +19 -3
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/pyproject.toml +2 -1
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/agent/prompt/builder.py +105 -35
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/agent/prompt/types.py +8 -3
- tau_coding_agent-0.4.7/tau/builtins/extensions/btw/__init__.py +303 -0
- tau_coding_agent-0.4.7/tau/builtins/extensions/watch/__init__.py +219 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/models/text.py +42 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/tools/edit.py +12 -4
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/tools/glob.py +7 -3
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/tools/grep.py +6 -2
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/tools/ls.py +7 -2
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/tools/read.py +7 -5
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/tools/terminal.py +4 -4
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/tools/write.py +1 -1
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/commands/types.py +6 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/console/cli.py +2 -2
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/engine/service.py +16 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/engine/types.py +9 -1
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/extensions/__init__.py +6 -2
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/extensions/api.py +19 -4
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/extensions/context.py +46 -2
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/extensions/loader.py +43 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/extensions/runtime.py +14 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/hooks/engine.py +2 -1
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/text/anthropic_claude_code.py +9 -2
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/text/anthropic_messages.py +9 -2
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/text/anthropic_vertex.py +9 -2
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/text/service.py +16 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/types.py +1 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/modes/interactive/app.py +7 -8
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/modes/interactive/commands/appearance.py +85 -69
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/modes/interactive/commands/model.py +44 -4
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/modes/interactive/components/config_selector.py +15 -21
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/modes/interactive/components/extension_selector.py +5 -5
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/modes/interactive/components/layout.py +35 -1
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/modes/interactive/components/message_list.py +43 -6
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/modes/interactive/components/model_selector.py +99 -46
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/modes/interactive/components/oauth_selector.py +5 -5
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/modes/interactive/components/overlays.py +201 -30
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/modes/interactive/components/selector_controller.py +12 -5
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/modes/interactive/components/session_selector.py +95 -83
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/modes/interactive/components/settings_selector.py +85 -38
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/modes/interactive/components/theme_selector.py +5 -5
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/modes/interactive/components/thinking_selector.py +3 -4
- tau_coding_agent-0.4.7/tau/modes/interactive/components/voice_selector.py +96 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/modes/interactive/input_handler.py +16 -10
- tau_coding_agent-0.4.7/tau/resources/__init__.py +18 -0
- tau_coding_agent-0.4.7/tau/resources/loader.py +480 -0
- tau_coding_agent-0.4.7/tau/resources/types.py +57 -0
- tau_coding_agent-0.4.7/tau/runtime/dependencies.py +58 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/runtime/service.py +253 -72
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/runtime/types.py +189 -140
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/session/manager.py +2 -1
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/session/utils.py +33 -25
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/settings/manager.py +14 -3
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/settings/types.py +2 -1
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/themes/registry.py +15 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/tui/markdown.py +17 -4
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/tui/terminal.py +27 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/tui/theme.py +5 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/tui/tui.py +19 -2
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7/tau_coding_agent.egg-info}/PKG-INFO +2 -1
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau_coding_agent.egg-info/SOURCES.txt +16 -1
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau_coding_agent.egg-info/requires.txt +1 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_agent_prompt.py +51 -10
- tau_coding_agent-0.4.7/tests/test_builtin_watch.py +64 -0
- tau_coding_agent-0.4.7/tests/test_command_execution_policy.py +55 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_command_registry.py +1 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_engine_execution.py +2 -2
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_engine_steering.py +26 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_extension_api.py +89 -0
- tau_coding_agent-0.4.7/tests/test_extension_lifecycle.py +234 -0
- tau_coding_agent-0.4.7/tests/test_model_command.py +72 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_model_selector_modal.py +119 -6
- tau_coding_agent-0.4.7/tests/test_resource_loader.py +334 -0
- tau_coding_agent-0.4.7/tests/test_runtime_sdk.py +286 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_selector_controller.py +26 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_session_manager.py +32 -2
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_settings_manager.py +15 -1
- tau_coding_agent-0.4.7/tests/test_subagents_extension.py +267 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_thinking_render.py +22 -1
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_tool_render.py +55 -1
- tau_coding_agent-0.4.7/tests/test_voice_selector.py +46 -0
- tau_coding_agent-0.4.5/docs/python-api.md +0 -274
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/LICENSE +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/MANIFEST.in +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/README.md +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/docs/IMPLEMENTATION_SUMMARY.md +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/docs/auth.md +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/docs/development.md +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/docs/extension-settings.md +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/docs/http-proxy.md +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/docs/inference-providers.md +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/docs/installation.md +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/docs/keybindings.md +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/docs/prompts.md +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/docs/quickstart.md +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/docs/sessions.md +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/docs/skills.md +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/docs/themes.md +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/setup.cfg +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/__init__.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/agent/__init__.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/agent/prompt/__init__.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/agent/service.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/agent/types.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/auth/manager.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/auth/storage.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/auth/types.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/__init__.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/commands/__init__.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/commands/clear.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/commands/compact.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/commands/reload.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/commands/session.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/extensions/footer/__init__.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/extensions/footer/git.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/extensions/footer/model.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/extensions/footer/utils.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/extensions/header/__init__.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/models/__init__.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/models/audio.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/models/image.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/models/video.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/prompts/commit.md +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/prompts/docs.md +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/prompts/explain.md +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/prompts/fix.md +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/prompts/refactor.md +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/prompts/review.md +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/prompts/test.md +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/providers/__init__.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/providers/audio.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/providers/image.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/providers/text.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/providers/video.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/skills/code-review/SKILL.md +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/skills/debug/SKILL.md +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/skills/git-commit/SKILL.md +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/themes/dark.yaml +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/themes/light.yaml +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/tools/__init__.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/tools/utils.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/commands/__init__.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/commands/registry.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/console/__init__.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/console/commands/__init__.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/console/commands/auth.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/console/commands/packages.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/console/commands/update.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/core/__init__.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/core/registry.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/engine/__init__.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/extensions/settings.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/hooks/__init__.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/hooks/inference.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/hooks/runtime.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/hooks/service.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/hooks/session.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/hooks/tui.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/hooks/types.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/__init__.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/__init__.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/audio/__init__.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/audio/base.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/audio/builtins.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/audio/elevenlabs_audio.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/audio/gemini_audio.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/audio/openai_audio.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/audio/registry.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/audio/sarvam_audio.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/audio/service.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/audio/utils.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/availability.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/image/__init__.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/image/base.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/image/builtins.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/image/gemini_image.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/image/openai_image.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/image/openrouter.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/image/registry.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/image/service.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/registry.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/text/__init__.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/text/base.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/text/builtins.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/text/gemini_generate.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/text/github_copilot_chat.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/text/google_antigravity.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/text/google_vertex.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/text/mistral_chat.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/text/ollama_chat.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/text/openai_codex_responses.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/text/openai_completions.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/text/openai_responses.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/text/openai_vertex.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/text/registry.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/text/types.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/text/utils.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/video/__init__.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/video/base.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/video/builtins.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/video/fal_video.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/video/openrouter_video.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/video/registry.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/video/service.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/model/__init__.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/model/registry.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/model/types.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/provider/__init__.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/provider/oauth/__init__.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/provider/oauth/anthropic_claude_code.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/provider/oauth/github_copilot.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/provider/oauth/google_antigravity.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/provider/oauth/openai_codex.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/provider/oauth/pkce.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/provider/oauth/types.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/provider/oauth/utils.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/provider/registry.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/provider/types.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/utils.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/message/__init__.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/message/types.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/message/utils.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/modes/__init__.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/modes/interactive/__init__.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/modes/interactive/agent_hooks.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/modes/interactive/commands/__init__.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/modes/interactive/commands/auth.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/modes/interactive/commands/context.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/modes/interactive/commands/extensions.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/modes/interactive/commands/misc.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/modes/interactive/commands/session.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/modes/interactive/components/__init__.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/modes/interactive/components/command_palette.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/modes/interactive/components/file_picker.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/modes/interactive/components/tree_selector.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/modes/interactive/components/trust_screen.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/modes/print/__init__.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/modes/rpc/__init__.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/modes/rpc/mode.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/modes/rpc/types.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/packages/__init__.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/packages/manager.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/packages/types.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/packages/utils.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/prompts/expand.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/prompts/loader.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/prompts/registry.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/prompts/types.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/session/branch_summarization.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/session/compaction.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/session/types.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/settings/paths.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/settings/storage.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/settings/utils.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/skills/loader.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/skills/registry.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/skills/types.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/themes/loader.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/themes/types.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/tool/__init__.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/tool/registry.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/tool/render.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/tool/types.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/trust/__init__.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/trust/manager.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/trust/types.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/trust/utils.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/tui/__init__.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/tui/autocomplete.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/tui/component.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/tui/components/__init__.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/tui/components/box.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/tui/components/editor.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/tui/components/image.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/tui/components/select_list.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/tui/components/spinner.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/tui/components/text_input.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/tui/input.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/tui/keybinding_hints.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/tui/ui_context.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/tui/utils.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/utils/__init__.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/utils/http_proxy.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/utils/image_processing.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/utils/secrets.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/utils/version_check.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau_coding_agent.egg-info/dependency_links.txt +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau_coding_agent.egg-info/entry_points.txt +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau_coding_agent.egg-info/top_level.txt +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_agent_compaction.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_agent_types.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_ansi.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_auth_command.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_auth_manager.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_auth_storage.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_branch_navigation.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_branch_summarization.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_builtin_tools.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_cli_inputs.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_compaction.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_diff.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_editor_protocol.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_engine_types.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_footer_model.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_footer_utils.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_fuzzy.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_http_proxy.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_image_processing.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_inference_api_text_utils.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_inference_error_utils.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_inference_types.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_inference_utils.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_keybindings.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_markdown.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_message_types.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_message_utils.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_model_availability.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_model_registry.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_model_types.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_oauth_utils.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_package_resources.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_packages_utils.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_pkce.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_prompts_expand.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_prompts_loader.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_prompts_registry.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_provider_registry.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_rpc_mode.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_secrets.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_session_trust_persist.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_session_types.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_session_utils.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_settings_paths.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_settings_storage.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_settings_utils.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_skills_loader.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_skills_registry.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_text_input.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_text_llm_invoke.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_theme_loader.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_themes_registry.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_tool_registry.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_trust_manager.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_trust_utils.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_tui_capabilities.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_tui_input.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_tui_layout_sizing.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_tui_theme.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_tui_utils.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_ui_context.py +0 -0
- {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_version_check.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.7
|
|
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,6 +26,7 @@ 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"
|
|
31
32
|
Dynamic: license-file
|
|
@@ -70,6 +70,7 @@ User input flows through these stages:
|
|
|
70
70
|
|--------|---------|
|
|
71
71
|
| `session/` | Session JSONL persistence, compaction, branching |
|
|
72
72
|
| `settings/` | Configuration from JSON files |
|
|
73
|
+
| `resources/` | Unified discovery of extensions, skills, prompts, and themes |
|
|
73
74
|
| `auth/` | Credential storage and resolution |
|
|
74
75
|
| `message/` | Message type definitions |
|
|
75
76
|
| `trust/` | Trust and permission checks |
|
|
@@ -97,7 +98,7 @@ User input flows through these stages:
|
|
|
97
98
|
|
|
98
99
|
| Module | Purpose |
|
|
99
100
|
|--------|---------|
|
|
100
|
-
| `packages/` |
|
|
101
|
+
| `packages/` | Installed package and dependency management |
|
|
101
102
|
| `rpc/` | JSON-RPC protocol for IDE integration |
|
|
102
103
|
|
|
103
104
|
## Agent Execution State Machine
|
|
@@ -141,6 +142,11 @@ TUI overlays participate in focus lifecycle. Hiding or closing a capturing
|
|
|
141
142
|
overlay restores the next visible overlay or its previous focus target.
|
|
142
143
|
Components exposing `dispose()` are disposed when their overlay closes.
|
|
143
144
|
|
|
145
|
+
Slash commands declare whether they require an idle agent. Idle-only commands
|
|
146
|
+
are deferred until the current turn settles; UI-only and read-only commands may
|
|
147
|
+
opt into immediate dispatch during a turn. Normal Enter input remains steering,
|
|
148
|
+
and Alt+Enter remains a post-turn follow-up message.
|
|
149
|
+
|
|
144
150
|
## Message Types and Context
|
|
145
151
|
|
|
146
152
|
Messages in sessions are typed:
|
|
@@ -211,12 +217,37 @@ Tools are executed in a sandboxed environment:
|
|
|
211
217
|
6. Result is serialized and added to context
|
|
212
218
|
```
|
|
213
219
|
|
|
214
|
-
Built-in tools (bash, read, write, edit, glob, grep, ls) are
|
|
220
|
+
Built-in tools (bash, read, write, edit, glob, grep, ls) are enabled by default.
|
|
221
|
+
`RuntimeConfig` can allow or exclude tools by name. Custom tools are registered
|
|
222
|
+
via extensions or passed directly to the runtime.
|
|
223
|
+
|
|
224
|
+
Programmatic runtimes can replace constructed services through
|
|
225
|
+
`RuntimeDependencies`. Typed factories cover settings, LLM/model/auth wiring,
|
|
226
|
+
session storage, hooks, and the tool registry. Session-bound factories run
|
|
227
|
+
again when the active session is replaced.
|
|
228
|
+
|
|
229
|
+
`Runtime.create_with_result()` returns the initialized runtime together with
|
|
230
|
+
resource diagnostics, extension errors, and requested-versus-selected
|
|
231
|
+
model/provider resolution. `Runtime.create()` remains the convenience API when
|
|
232
|
+
the caller does not need startup details.
|
|
233
|
+
|
|
234
|
+
Extension reloads pass through a serialized coordinator. Callback-triggered or
|
|
235
|
+
mid-turn requests wait until extension dispatch and the agent lifecycle settle.
|
|
236
|
+
Runtime generations invalidate contexts captured before reload, session
|
|
237
|
+
replacement, or shutdown, and shutdown detaches the extension runtime from its
|
|
238
|
+
hook bus.
|
|
215
239
|
|
|
216
240
|
## Extension Points
|
|
217
241
|
|
|
218
242
|
Tau is designed to be extended without modifying core code. Key extension points via the `tau` parameter in `register()`:
|
|
219
243
|
|
|
244
|
+
Resource discovery is centralized behind the replaceable `ResourceLoader`
|
|
245
|
+
protocol. `DefaultResourceLoader` supports per-resource overrides. Startup and
|
|
246
|
+
`/reload` consume one `ResourceSnapshot`, keeping extensions, skills, prompts,
|
|
247
|
+
themes, context files, and structured diagnostics consistent. Diagnostics
|
|
248
|
+
identify invalid configured paths, package manifests/resources, hook paths, and
|
|
249
|
+
context read failures without preventing valid resources from loading.
|
|
250
|
+
|
|
220
251
|
### Tools
|
|
221
252
|
|
|
222
253
|
Register custom tools that the agent can call:
|
|
@@ -31,6 +31,13 @@ augment it.
|
|
|
31
31
|
|
|
32
32
|
## Run Modes
|
|
33
33
|
|
|
34
|
+
## Interactive Commands
|
|
35
|
+
|
|
36
|
+
`/watch <url> [question]` loads metadata and available English captions for a
|
|
37
|
+
public video through `yt-dlp`, then sends them to the active model. Install
|
|
38
|
+
`yt-dlp` separately and ensure it is available on `PATH`. Video frames and
|
|
39
|
+
audio transcription are not performed.
|
|
40
|
+
|
|
34
41
|
### Interactive (default)
|
|
35
42
|
|
|
36
43
|
Start the full terminal UI:
|
|
@@ -89,6 +89,34 @@ def register(tau):
|
|
|
89
89
|
pass
|
|
90
90
|
```
|
|
91
91
|
|
|
92
|
+
### Inline extension factories
|
|
93
|
+
|
|
94
|
+
Python API users can supply the same registration function directly through
|
|
95
|
+
`RuntimeConfig`, without creating or installing an extension file:
|
|
96
|
+
|
|
97
|
+
```python
|
|
98
|
+
from tau.extensions import ExtensionAPI
|
|
99
|
+
from tau.runtime.types import RuntimeConfig
|
|
100
|
+
|
|
101
|
+
def configure(tau: ExtensionAPI) -> None:
|
|
102
|
+
tau.register_tool(MyTool())
|
|
103
|
+
tau.append_prompt("Use the embedding application's workflow.")
|
|
104
|
+
|
|
105
|
+
config = RuntimeConfig(
|
|
106
|
+
cwd=Path.cwd(),
|
|
107
|
+
extension_factories=[configure],
|
|
108
|
+
)
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
Inline factories receive the normal `ExtensionAPI`, can be synchronous or
|
|
112
|
+
asynchronous, and load after file-based extensions. They participate in the
|
|
113
|
+
same tool, command, hook, provider, service, prompt, theme, and UI registration
|
|
114
|
+
systems. Factory failures are isolated and reported as `ExtensionError`.
|
|
115
|
+
|
|
116
|
+
`/reload` unloads the old inline extensions and executes the factories again,
|
|
117
|
+
preventing duplicate hook subscriptions. Session replacement reuses the active
|
|
118
|
+
extension runtime and does not rerun factories.
|
|
119
|
+
|
|
92
120
|
`register` may be `async` if setup requires awaiting:
|
|
93
121
|
|
|
94
122
|
```python
|
|
@@ -459,6 +487,34 @@ def register(tau):
|
|
|
459
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 |
|
|
460
488
|
| `context` | `messages` | `ContextEventResult` | Full message history about to be sent to LLM. Return `messages=` to rewrite it |
|
|
461
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
|
+
|
|
462
518
|
**Streaming & messages**
|
|
463
519
|
|
|
464
520
|
| Event | Payload fields | Result type | Description |
|
|
@@ -786,7 +842,7 @@ def register(tau):
|
|
|
786
842
|
| Method | Description |
|
|
787
843
|
|--------|-------------|
|
|
788
844
|
| `tau.register_tool(tool)` | Add a tool the agent can call |
|
|
789
|
-
| `tau.register_command(name, desc, handler, aliases=[], get_argument_completions=None)` | Add a `/name` slash command
|
|
845
|
+
| `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 |
|
|
790
846
|
| `tau.on(event, handler)` / `@tau.on(event)` | Subscribe to a lifecycle event |
|
|
791
847
|
| `tau.register_shortcut(key, desc, handler)` | Bind a keyboard shortcut |
|
|
792
848
|
| `tau.append_prompt(text)` | Append text to the system prompt |
|
|
@@ -1423,6 +1479,18 @@ async def on_start(event, ctx):
|
|
|
1423
1479
|
`/reload` re-discovers and hot-reloads all extensions, skills, prompts, and
|
|
1424
1480
|
settings without restarting the session.
|
|
1425
1481
|
|
|
1482
|
+
Reload requests are serialized. A request made from an extension callback or
|
|
1483
|
+
while the agent is processing is queued until the callback pipeline and complete
|
|
1484
|
+
agent lifecycle settle. Multiple queued requests are coalesced. Consequently,
|
|
1485
|
+
`await ctx.reload()` acknowledges a request but does not guarantee that a
|
|
1486
|
+
deferred reload has already completed.
|
|
1487
|
+
|
|
1488
|
+
Contexts are generation-bound. An `ExtensionContext` captured before `/reload`,
|
|
1489
|
+
`/new`, `/resume`, `/clone`, or runtime shutdown raises
|
|
1490
|
+
`StaleExtensionContextError` when reused. Do not retain contexts in long-lived
|
|
1491
|
+
background tasks; capture immutable values or acquire a fresh context from a
|
|
1492
|
+
new callback.
|
|
1493
|
+
|
|
1426
1494
|
**What gets picked up:**
|
|
1427
1495
|
- New or modified extension files
|
|
1428
1496
|
- New or modified skill and prompt template files
|
|
@@ -1432,10 +1500,16 @@ settings without restarting the session.
|
|
|
1432
1500
|
**What persists across reload:**
|
|
1433
1501
|
- The current session (messages, branching state)
|
|
1434
1502
|
- Auth credentials
|
|
1435
|
-
-
|
|
1503
|
+
- Normally imported third-party Python modules, which remain cached in `sys.modules`
|
|
1504
|
+
- External state not explicitly released by the extension
|
|
1436
1505
|
|
|
1437
1506
|
**What resets:**
|
|
1438
1507
|
- All registered tools, commands, shortcuts, and event handlers — re-registered from scratch
|
|
1439
1508
|
- The system prompt — rebuilt from SYSTEM.md and all `append_prompt` calls
|
|
1509
|
+
- Extension entry-module globals and inline factory state
|
|
1510
|
+
|
|
1511
|
+
Tau emits `extension_unload` before replacing an extension runtime and
|
|
1512
|
+
`runtime_stop` before shutdown. Use those events to release subprocesses,
|
|
1513
|
+
background tasks, sockets, and registrations outside Tau.
|
|
1440
1514
|
|
|
1441
1515
|
After reload, new tools are available to the model immediately in the next turn.
|
|
@@ -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
|
|
@@ -62,9 +62,14 @@ Output from executing a tool.
|
|
|
62
62
|
}
|
|
63
63
|
```
|
|
64
64
|
|
|
65
|
+
Assistant text and thinking content are rendered as Markdown in the interactive
|
|
66
|
+
TUI, including while content is streaming. Tool results remain plain text unless
|
|
67
|
+
the tool explicitly marks a successful result for Markdown rendering.
|
|
68
|
+
|
|
65
69
|
### System Message
|
|
66
70
|
|
|
67
|
-
Context and instructions for the agent.
|
|
71
|
+
Context and instructions for the agent. Tau constructs this separately from
|
|
72
|
+
persisted session messages and may include trusted project context files.
|
|
68
73
|
|
|
69
74
|
```python
|
|
70
75
|
{
|
|
@@ -145,17 +150,18 @@ Use `@` in the editor to fuzzy-search files.
|
|
|
145
150
|
|
|
146
151
|
## System Instructions
|
|
147
152
|
|
|
148
|
-
Tau loads
|
|
153
|
+
Tau loads project instructions from context files:
|
|
154
|
+
|
|
155
|
+
**Within a Git repository:**
|
|
149
156
|
|
|
150
|
-
|
|
151
|
-
-
|
|
152
|
-
-
|
|
157
|
+
- `AGENTS.md` or `CLAUDE.md`, matched case-insensitively
|
|
158
|
+
- One file per directory from the repository root through the current directory
|
|
159
|
+
- Files closer to the current directory take precedence
|
|
153
160
|
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
- Used as fallback for all projects
|
|
161
|
+
Outside a Git repository, only the current directory is checked. Context files
|
|
162
|
+
are loaded only for trusted projects.
|
|
157
163
|
|
|
158
|
-
Example
|
|
164
|
+
Example `AGENTS.md`:
|
|
159
165
|
|
|
160
166
|
```markdown
|
|
161
167
|
# Project Instructions
|
|
@@ -167,6 +173,7 @@ Example `.agents.md`:
|
|
|
167
173
|
```
|
|
168
174
|
|
|
169
175
|
Instructions are automatically injected into every turn sent to the LLM.
|
|
176
|
+
See [Project Context Files](project-context.md) for complete behavior.
|
|
170
177
|
|
|
171
178
|
## Message Delivery
|
|
172
179
|
|
|
@@ -5,9 +5,13 @@ Tau automatically discovers and includes project-specific instructions from `AGE
|
|
|
5
5
|
## Overview
|
|
6
6
|
|
|
7
7
|
When you run Tau in a project directory, it:
|
|
8
|
+
|
|
8
9
|
1. Looks for `AGENTS.md` or `CLAUDE.md` (case-insensitive)
|
|
9
|
-
2.
|
|
10
|
-
3.
|
|
10
|
+
2. Walks from the Git repository root through the current directory
|
|
11
|
+
3. If the project is trusted, includes one context file from each directory
|
|
12
|
+
4. Prioritizes the closest file above parent files, general Tau rules, and tool guidelines
|
|
13
|
+
|
|
14
|
+
Outside a Git repository, Tau checks only the current directory.
|
|
11
15
|
|
|
12
16
|
This is useful for:
|
|
13
17
|
- **Coding standards** — Define how the agent should write code
|
|
@@ -53,13 +57,14 @@ Or use `CLAUDE.md` for the same purpose (they're equivalent).
|
|
|
53
57
|
|
|
54
58
|
### File priority
|
|
55
59
|
|
|
56
|
-
Tau checks for these
|
|
60
|
+
Tau checks for these names case-insensitively, in this order:
|
|
61
|
+
|
|
57
62
|
1. `AGENTS.md`
|
|
58
|
-
2. `
|
|
59
|
-
3. `CLAUDE.md`
|
|
60
|
-
4. `CLAUDE.MD`
|
|
63
|
+
2. `CLAUDE.md`
|
|
61
64
|
|
|
62
|
-
The first one found is used.
|
|
65
|
+
The first one found in each directory is used. When multiple directories provide
|
|
66
|
+
instructions, Tau orders them from the repository root to the current directory.
|
|
67
|
+
The closest file takes precedence if instructions conflict.
|
|
63
68
|
|
|
64
69
|
## Trust & Security
|
|
65
70
|
|
|
@@ -140,7 +145,8 @@ Project-specific guidelines and rules (from AGENTS.md):
|
|
|
140
145
|
|
|
141
146
|
[Content of AGENTS.md here]
|
|
142
147
|
|
|
143
|
-
|
|
148
|
+
Files are ordered from the repository root toward the current directory; later
|
|
149
|
+
files take precedence.
|
|
144
150
|
```
|
|
145
151
|
|
|
146
152
|
The agent sees this and prioritizes project instructions when making decisions.
|
|
@@ -220,14 +226,15 @@ The agent sees this and prioritizes project instructions when making decisions.
|
|
|
220
226
|
## Common Issues
|
|
221
227
|
|
|
222
228
|
**Project context not appearing**
|
|
223
|
-
|
|
224
|
-
-
|
|
229
|
+
|
|
230
|
+
- Check the file exists between the repository root and current directory
|
|
231
|
+
- Verify the filename is `AGENTS.md` or `CLAUDE.md`, in any letter case
|
|
225
232
|
- Check project trust: `tau --approve` or `/trust` command
|
|
226
233
|
- Use `--no-context-files` to confirm it's being loaded
|
|
227
234
|
|
|
228
235
|
**Want to see if it's loaded**
|
|
229
|
-
|
|
230
|
-
-
|
|
236
|
+
|
|
237
|
+
- Inspect the effective system prompt through the Python API or an extension context
|
|
231
238
|
|
|
232
239
|
**Trust decisions not persisting**
|
|
233
240
|
- By default, trust decisions are stored in `~/.tau/trust.json`
|
|
@@ -239,7 +246,7 @@ The agent sees this and prioritizes project instructions when making decisions.
|
|
|
239
246
|
| Approach | When to use | Pros | Cons |
|
|
240
247
|
|----------|-----------|------|------|
|
|
241
248
|
| **AGENTS.md/CLAUDE.md** | Team project guidelines | Lightweight, auto-discovered, version-controlled | Limited to per-project |
|
|
242
|
-
| **Custom prompt (`--system
|
|
249
|
+
| **Custom prompt (`--system`)** | Complete one-off prompt replacement | Flexible | Bypasses generated tools, project context, skills, Git, environment, and append sections |
|
|
243
250
|
| **settings.json** | User/global preferences | Persistent | Not project-specific |
|
|
244
251
|
| **Environment variables** | Sensitive data, deployment-specific | Secure, flexible | Not human-readable |
|
|
245
252
|
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
# Project Structure
|
|
2
2
|
|
|
3
|
-
Tau consists of
|
|
3
|
+
Tau consists of 230 Python modules organized into 25 main packages. This page documents the codebase organization and provides module-by-module reference for contributors and agents.
|
|
4
4
|
|
|
5
5
|
## Directory Structure
|
|
6
6
|
|
|
7
7
|
```
|
|
8
|
-
tau/ # Main package (
|
|
8
|
+
tau/ # Main package (230 modules)
|
|
9
9
|
├── __init__.py
|
|
10
10
|
├── content_registry.py # Content registry abstractions
|
|
11
11
|
├── agent/ # Agent execution service
|
|
@@ -31,6 +31,7 @@ tau/ # Main package (205 modules)
|
|
|
31
31
|
├── message/ # Message types and utilities
|
|
32
32
|
├── packages/ # Package/dependency management
|
|
33
33
|
├── prompts/ # Prompt template system
|
|
34
|
+
├── resources/ # Unified runtime resource discovery
|
|
34
35
|
├── rpc/ # JSON-RPC protocol for IDE integration
|
|
35
36
|
├── runtime/ # Agent runtime service
|
|
36
37
|
├── session/ # Session management and persistence
|
|
@@ -154,12 +155,22 @@ Message data structures and utilities.
|
|
|
154
155
|
|
|
155
156
|
### `packages/` - Package Management
|
|
156
157
|
|
|
157
|
-
|
|
158
|
+
Installed package and dependency management.
|
|
158
159
|
|
|
159
160
|
- `manager.py` - Package management
|
|
160
161
|
- `types.py` - Package types
|
|
161
162
|
- `utils.py` - Package utilities
|
|
162
163
|
|
|
164
|
+
### `resources/` - Resource Discovery
|
|
165
|
+
|
|
166
|
+
The replaceable loader builds one immutable snapshot from built-in, global,
|
|
167
|
+
project, installed-package, hook-provided, and context-file resources. It
|
|
168
|
+
supports focused overrides and structured diagnostics. Runtime startup and
|
|
169
|
+
`/reload` both consume it.
|
|
170
|
+
|
|
171
|
+
- `loader.py` - Resource loader protocol, default discovery, and registry application
|
|
172
|
+
- `types.py` - `ResourceContext`, immutable `ResourceSnapshot`, context files, and diagnostics
|
|
173
|
+
|
|
163
174
|
### `prompts/` - Prompt Template System
|
|
164
175
|
|
|
165
176
|
Prompt loading and variable substitution.
|
|
@@ -178,10 +189,12 @@ JSON-RPC server for IDE integration.
|
|
|
178
189
|
|
|
179
190
|
### `runtime/` - Agent Runtime
|
|
180
191
|
|
|
181
|
-
Wires together agent, session, engine, and extensions
|
|
192
|
+
Wires together agent, session, engine, and extensions with replaceable service
|
|
193
|
+
factories for programmatic embedding.
|
|
182
194
|
|
|
195
|
+
- `dependencies.py` - Typed dependency factories and creation contexts
|
|
183
196
|
- `service.py` - Main runtime orchestration
|
|
184
|
-
- `types.py` - Runtime state types
|
|
197
|
+
- `types.py` - Runtime state, configuration, and structured startup result types
|
|
185
198
|
|
|
186
199
|
### `session/` - Session Management
|
|
187
200
|
|
|
@@ -400,7 +413,7 @@ See [Extensions Guide](extensions.md) for detailed examples.
|
|
|
400
413
|
## Code Statistics
|
|
401
414
|
|
|
402
415
|
- **Total modules**: 205 Python files
|
|
403
|
-
- **Main package**: tau/ (
|
|
416
|
+
- **Main package**: tau/ (25 subpackages)
|
|
404
417
|
- **Test coverage**: tests/ directory
|
|
405
418
|
- **Lines of code**: ~8,000 LOC (excluding tests and docs)
|
|
406
419
|
- **Type hints**: Full type coverage with mypy/pyright
|