tau-coding-agent 0.7.8__tar.gz → 0.7.9__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.7.8/tau_coding_agent.egg-info → tau_coding_agent-0.7.9}/PKG-INFO +1 -1
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/docs/auth.md +1 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/docs/inference-providers.md +32 -2
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/pyproject.toml +1 -1
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/todo/__init__.py +1 -1
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/models/text.py +15 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/providers/text.py +9 -18
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/inference/api/text/service.py +11 -8
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/modes/interactive/agent_hooks.py +59 -6
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/modes/interactive/components/message_list.py +58 -5
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/tui/markdown.py +123 -2
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/tui/service.py +108 -11
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9/tau_coding_agent.egg-info}/PKG-INFO +1 -1
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau_coding_agent.egg-info/SOURCES.txt +2 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_markdown.py +60 -1
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_message_list_frozen.py +9 -9
- tau_coding_agent-0.7.9/tests/test_subconscious_provider.py +27 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_text_llm_invoke.py +17 -0
- tau_coding_agent-0.7.9/tests/test_tui_frozen_row_cache.py +170 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/LICENSE +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/MANIFEST.in +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/README.md +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/docs/architecture.md +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/docs/cli-reference.md +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/docs/creating-tools.md +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/docs/development.md +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/docs/docs.json +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/docs/engine.md +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/docs/extension-settings.md +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/docs/extensions.md +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/docs/http-proxy.md +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/docs/index.md +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/docs/inference.md +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/docs/installation.md +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/docs/keybindings.md +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/docs/messages.md +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/docs/project-context.md +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/docs/project-structure.md +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/docs/prompts.md +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/docs/python-api.md +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/docs/quickstart.md +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/docs/sessions.md +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/docs/settings.md +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/docs/skills.md +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/docs/themes.md +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/docs/tools.md +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/docs/tui.md +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/docs/usage.md +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/setup.cfg +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/__init__.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/agent/__init__.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/agent/embedded.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/agent/prompt/__init__.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/agent/prompt/builder.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/agent/prompt/types.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/agent/service.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/agent/types.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/auth/manager.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/auth/storage.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/auth/types.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/__init__.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/commands/__init__.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/commands/clear.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/commands/compact.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/commands/reload.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/commands/session.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/ask_user/__init__.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/ask_user/component.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/ask_user/manifest.json +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/ask_user/schema.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/ask_user/tool.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/btw/__init__.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/computer_use/__init__.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/computer_use/computer.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/computer_use/macos/ax/README.md +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/computer_use/macos/ax/__init__.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/computer_use/macos/ax/controls.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/computer_use/macos/ax/core.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/computer_use/macos/ax/enums.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/computer_use/macos/ax/events.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/computer_use/macos/ax/patterns.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/computer_use/macos/ax/py.typed +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/computer_use/macos/desktop/__init__.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/computer_use/macos/desktop/config.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/computer_use/macos/desktop/service.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/computer_use/macos/tree/__init__.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/computer_use/macos/tree/config.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/computer_use/macos/tree/service.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/computer_use/macos/tree/views.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/computer_use/macos/watchdog/__init__.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/computer_use/macos/watchdog/service.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/computer_use/manifest.json +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/computer_use/router.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/computer_use/state.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/computer_use/types.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/computer_use/windows/desktop/__init__.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/computer_use/windows/desktop/service.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/computer_use/windows/tree/__init__.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/computer_use/windows/tree/cache_utils.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/computer_use/windows/tree/config.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/computer_use/windows/tree/service.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/computer_use/windows/tree/utils.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/computer_use/windows/tree/views.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/computer_use/windows/uia/__init__.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/computer_use/windows/uia/controls.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/computer_use/windows/uia/core.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/computer_use/windows/uia/enums.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/computer_use/windows/uia/events.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/computer_use/windows/uia/exceptions.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/computer_use/windows/uia/patterns.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/computer_use/windows/watchdog/__init__.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/computer_use/windows/watchdog/event_handlers.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/computer_use/windows/watchdog/service.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/footer/__init__.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/footer/git.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/footer/model.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/footer/utils.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/header/__init__.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/loop/README.md +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/loop/__init__.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/loop/dispatch.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/loop/duration.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/loop/state.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/sandbox/__init__.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/sandbox/manager.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/sandbox/manifest.json +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/sandbox/sandbox_tool.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/subagent/__init__.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/subagent/agents/context-builder.md +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/subagent/agents/delegate.md +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/subagent/agents/oracle.md +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/subagent/agents/planner.md +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/subagent/agents/researcher.md +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/subagent/agents/reviewer.md +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/subagent/agents/scout.md +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/subagent/agents/worker.md +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/subagent/agents.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/subagent/manifest.json +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/subagent/subagent_schema.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/subagent/subagent_tool.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/todo/manifest.json +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/todo/todo_schema.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/todo/todo_tool.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/watch/__init__.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/web/__init__.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/web/engines/__init__.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/web/engines/base.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/web/engines/ddgs_engine.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/web/engines/exa_engine.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/web/engines/jina_engine.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/web/engines/tavily_engine.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/web/manifest.json +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/web/tools/__init__.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/web/tools/fetch.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/web/tools/search.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/workflow/__init__.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/workflow/agent_discovery.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/workflow/manifest.json +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/workflow/model.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/workflow/runner.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/workflow/skills/create-workflows/SKILL.md +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/extensions/workflow/store.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/models/__init__.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/models/audio.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/models/image.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/models/video.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/prompts/commit.md +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/prompts/docs.md +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/prompts/explain.md +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/prompts/fix.md +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/prompts/refactor.md +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/prompts/review.md +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/prompts/test.md +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/providers/__init__.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/providers/audio.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/providers/image.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/providers/video.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/skills/code-review/SKILL.md +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/skills/debug/SKILL.md +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/skills/git-commit/SKILL.md +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/skills/skill-creator/LICENSE.txt +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/skills/skill-creator/SKILL.md +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/themes/ayu-dark.yaml +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/themes/catppuccin.yaml +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/themes/dark.yaml +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/themes/dracula.yaml +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/themes/everforest.yaml +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/themes/gruvbox.yaml +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/themes/horizon.yaml +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/themes/kanagawa.yaml +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/themes/light.yaml +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/themes/material-ocean.yaml +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/themes/monokai.yaml +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/themes/night-owl.yaml +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/themes/nord.yaml +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/themes/one-dark.yaml +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/themes/rose-pine.yaml +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/themes/solarized-dark.yaml +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/themes/tokyo-night.yaml +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/tools/__init__.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/tools/edit.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/tools/glob.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/tools/grep.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/tools/ls.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/tools/read.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/tools/terminal.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/tools/utils.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/builtins/tools/write.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/commands/__init__.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/commands/registry.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/commands/types.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/console/__init__.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/console/cli.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/console/commands/__init__.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/console/commands/auth.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/console/commands/doctor.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/console/commands/packages.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/console/commands/serve.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/console/commands/update.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/core/__init__.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/core/registry.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/engine/__init__.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/engine/service.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/engine/types.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/extensions/__init__.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/extensions/api.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/extensions/context.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/extensions/loader.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/extensions/runtime.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/extensions/settings.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/hooks/__init__.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/hooks/engine.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/hooks/inference.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/hooks/runtime.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/hooks/service.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/hooks/session.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/hooks/tui.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/hooks/types.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/inference/__init__.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/inference/api/__init__.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/inference/api/audio/__init__.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/inference/api/audio/base.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/inference/api/audio/builtins.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/inference/api/audio/elevenlabs_audio.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/inference/api/audio/gemini_audio.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/inference/api/audio/openai_audio.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/inference/api/audio/registry.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/inference/api/audio/sarvam_audio.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/inference/api/audio/service.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/inference/api/audio/utils.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/inference/api/availability.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/inference/api/image/__init__.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/inference/api/image/base.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/inference/api/image/builtins.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/inference/api/image/gemini_image.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/inference/api/image/openai_image.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/inference/api/image/openrouter.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/inference/api/image/registry.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/inference/api/image/service.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/inference/api/registry.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/inference/api/text/__init__.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/inference/api/text/anthropic_claude_code.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/inference/api/text/anthropic_messages.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/inference/api/text/anthropic_vertex.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/inference/api/text/base.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/inference/api/text/builtins.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/inference/api/text/dialect.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/inference/api/text/gemini_generate.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/inference/api/text/github_copilot_chat.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/inference/api/text/google_antigravity.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/inference/api/text/google_vertex.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/inference/api/text/mistral_chat.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/inference/api/text/ollama_chat.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/inference/api/text/openai_codex_responses.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/inference/api/text/openai_completions.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/inference/api/text/openai_responses.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/inference/api/text/openai_vertex.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/inference/api/text/registry.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/inference/api/text/types.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/inference/api/text/utils.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/inference/api/text/xai_responses.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/inference/api/video/__init__.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/inference/api/video/base.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/inference/api/video/builtins.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/inference/api/video/fal_video.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/inference/api/video/openrouter_video.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/inference/api/video/registry.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/inference/api/video/service.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/inference/api/video/zai_video.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/inference/model/__init__.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/inference/model/local/__init__.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/inference/model/local/llamacpp.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/inference/model/local/lmstudio.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/inference/model/local/ollama.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/inference/model/local/vllm.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/inference/model/registry.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/inference/model/types.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/inference/provider/__init__.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/inference/provider/oauth/__init__.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/inference/provider/oauth/anthropic_claude_code.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/inference/provider/oauth/github_copilot.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/inference/provider/oauth/google_antigravity.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/inference/provider/oauth/openai_codex.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/inference/provider/oauth/pkce.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/inference/provider/oauth/types.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/inference/provider/oauth/utils.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/inference/provider/oauth/xai_grok.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/inference/provider/registry.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/inference/provider/types.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/inference/types.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/inference/utils.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/message/__init__.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/message/types.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/message/utils.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/modes/__init__.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/modes/interactive/__init__.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/modes/interactive/app.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/modes/interactive/commands/__init__.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/modes/interactive/commands/appearance.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/modes/interactive/commands/auth.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/modes/interactive/commands/context.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/modes/interactive/commands/extensions.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/modes/interactive/commands/misc.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/modes/interactive/commands/model.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/modes/interactive/commands/session.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/modes/interactive/components/__init__.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/modes/interactive/components/command_palette.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/modes/interactive/components/config_selector.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/modes/interactive/components/extension_selector.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/modes/interactive/components/file_picker.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/modes/interactive/components/layout.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/modes/interactive/components/model_selector.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/modes/interactive/components/oauth_selector.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/modes/interactive/components/overlays.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/modes/interactive/components/selector_controller.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/modes/interactive/components/session_selector.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/modes/interactive/components/settings_selector.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/modes/interactive/components/theme_selector.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/modes/interactive/components/thinking_selector.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/modes/interactive/components/tree_selector.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/modes/interactive/components/trust_screen.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/modes/interactive/components/voice_selector.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/modes/interactive/input_handler.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/modes/interactive/ui_context.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/modes/print/__init__.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/modes/rpc/__init__.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/modes/rpc/mode.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/modes/rpc/types.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/modes/serve/__init__.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/modes/serve/mode.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/packages/__init__.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/packages/manager.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/packages/types.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/packages/utils.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/prompts/expand.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/prompts/loader.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/prompts/registry.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/prompts/types.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/resources/__init__.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/resources/loader.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/resources/types.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/runtime/dependencies.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/runtime/service.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/runtime/types.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/session/branch_summarization.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/session/compaction.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/session/manager.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/session/types.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/session/utils.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/settings/manager.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/settings/paths.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/settings/storage.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/settings/types.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/settings/utils.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/skills/loader.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/skills/registry.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/skills/types.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/telemetry/__init__.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/telemetry/service.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/telemetry/types.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/themes/loader.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/themes/registry.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/themes/types.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/tool/__init__.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/tool/registry.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/tool/render.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/tool/types.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/trust/__init__.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/trust/manager.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/trust/types.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/trust/utils.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/tui/__init__.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/tui/ansi_bridge.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/tui/autocomplete.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/tui/backend.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/tui/buffer.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/tui/component.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/tui/components/__init__.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/tui/components/box.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/tui/components/editor.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/tui/components/image.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/tui/components/select_list.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/tui/components/simple_picker.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/tui/components/spinner.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/tui/components/text_input.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/tui/components/widget_bridge.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/tui/frame.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/tui/geometry.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/tui/input.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/tui/keybinding_hints.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/tui/layout.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/tui/palette.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/tui/style.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/tui/terminal.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/tui/testing.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/tui/text.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/tui/theme.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/tui/utils.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/tui/widget.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/tui/widgets/__init__.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/tui/widgets/barchart.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/tui/widgets/block.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/tui/widgets/calendar.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/tui/widgets/canvas.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/tui/widgets/chart.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/tui/widgets/clear.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/tui/widgets/gauge.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/tui/widgets/list.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/tui/widgets/paragraph.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/tui/widgets/scrollbar.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/tui/widgets/sparkline.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/tui/widgets/symbols.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/tui/widgets/table.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/tui/widgets/tabs.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/utils/__init__.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/utils/format.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/utils/http_proxy.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/utils/image_processing.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/utils/logging.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/utils/secrets.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/utils/timing.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/utils/version_check.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau_coding_agent.egg-info/dependency_links.txt +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau_coding_agent.egg-info/entry_points.txt +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau_coding_agent.egg-info/requires.txt +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau_coding_agent.egg-info/top_level.txt +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_agent_compaction.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_agent_hooks.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_agent_prompt.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_agent_types.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_ansi.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_ansi_bridge_legacy_image.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_anthropic_tool_history.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_ask_user_extension.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_audio_transcription_apis.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_auth_command.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_auth_manager.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_auth_storage.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_autocomplete_modifiers.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_branch_navigation.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_branch_summarization.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_builtin_tools.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_builtin_watch.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_cli_inputs.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_cmd_copy.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_command_execution_policy.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_command_registry.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_compaction.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_component_buffer_bridge.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_diff.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_doctor.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_editor_protocol.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_engine_execution.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_engine_length_and_live_tools.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_engine_steering.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_engine_types.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_escape_behavior.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_extension_api.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_extension_lifecycle.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_footer_model.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_footer_utils.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_fuzzy.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_gemini_generate.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_google_antigravity.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_google_vertex.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_http_proxy.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_image_processing.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_inference_api_text_utils.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_inference_dialect.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_inference_error_utils.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_inference_types.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_inference_utils.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_input_handler_paste.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_keybindings.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_layout_render_cells.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_local_model_discovery.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_message_types.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_message_utils.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_model_audio_modality.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_model_availability.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_model_command.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_model_file_modality.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_model_registry.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_model_selector_modal.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_model_types.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_oauth_utils.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_openai_codex_responses_lite.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_openai_responses_extra_body.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_package_manager_venv.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_package_resources.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_packages_utils.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_peer_extension.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_pkce.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_prompts_expand.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_prompts_loader.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_prompts_registry.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_provider_audio_content.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_provider_file_content.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_provider_registry.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_resource_loader.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_rpc_mode.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_runtime_sdk.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_scrollback_raw_writes.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_scrollback_terminal.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_secrets.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_select_list_render_cells.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_selector_controller.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_session_manager.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_session_trust_persist.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_session_types.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_session_utils.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_settings_manager.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_settings_paths.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_settings_storage.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_settings_utils.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_skills_loader.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_skills_registry.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_startup_timing.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_strip_control_chars.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_subagent_context.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_telemetry.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_text_input.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_text_input_render_cells.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_text_llm_model_resolution.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_theme_loader.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_themes_registry.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_thinking_render.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_tool_registry.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_tool_render.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_tree_branch_restore.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_trust_manager.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_trust_utils.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_tui_capabilities.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_tui_child_rows.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_tui_input.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_tui_layout_sizing.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_tui_public_api.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_tui_renderer.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_tui_select_list.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_tui_theme.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_tui_utils.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_ui_context.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_utils_hashline.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tests/test_version_check.py +0 -0
- {tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/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.7.
|
|
3
|
+
Version: 0.7.9
|
|
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
|
|
@@ -145,6 +145,7 @@ The provider ID used as the key in `auth.json` and the `{PROVIDER}_API_KEY` env
|
|
|
145
145
|
| Mistral | `mistral` | `MISTRAL_API_KEY` |
|
|
146
146
|
| Fireworks AI | `fireworks` | `FIREWORKS_API_KEY` |
|
|
147
147
|
| Hugging Face | `huggingface` | `HUGGINGFACE_API_KEY` |
|
|
148
|
+
| Subconscious | `subconscious` | `SUBCONSCIOUS_API_KEY` |
|
|
148
149
|
| Ollama | `ollama` | None required (local server, default `http://localhost:11434`) |
|
|
149
150
|
|
|
150
151
|
## Next Steps
|
|
@@ -8,8 +8,8 @@ Tau supports the following inference providers:
|
|
|
8
8
|
|
|
9
9
|
Built-in API-key providers are `openai`, `anthropic`, `google`, `nvidia`,
|
|
10
10
|
`groq`, `openrouter`, `perplexity`, `xai`, `bedrock`, `kimi`, `minimax`,
|
|
11
|
-
`cerebras`, `deepseek`, `zai`, `kilocode`, `fireworks`, `huggingface`,
|
|
12
|
-
`mistral`.
|
|
11
|
+
`cerebras`, `deepseek`, `zai`, `kilocode`, `fireworks`, `huggingface`,
|
|
12
|
+
`subconscious`, and `mistral`.
|
|
13
13
|
|
|
14
14
|
Tau also includes local `ollama`, Google/Anthropic/OpenAI-compatible Vertex AI
|
|
15
15
|
providers, and OAuth providers for OpenAI Codex, Claude Code, GitHub Copilot,
|
|
@@ -161,6 +161,36 @@ tau --model huggingface/deepseek-ai/DeepSeek-V3-0324 -p "Say hello"
|
|
|
161
161
|
- Model IDs are Hugging Face Hub repo IDs (e.g. `meta-llama/Llama-3.3-70B-Instruct`)
|
|
162
162
|
- Built-in model entries are pinned to a specific backend with `<repo>:<provider>` (e.g. `openai/gpt-oss-120b:groq`) rather than the router's default `:fastest` routing, since unpinned routing can silently switch to a backend with different tool-calling behavior. You can still use any model/backend combination the router supports via `tau --model huggingface/<repo>[:<provider>]` even if it isn't in the built-in list.
|
|
163
163
|
|
|
164
|
+
## Subconscious
|
|
165
|
+
|
|
166
|
+
Subconscious provides hosted inference through OpenAI-compatible Chat Completions
|
|
167
|
+
and Anthropic-compatible Messages APIs. Tau uses Chat Completions because dashboard
|
|
168
|
+
keys with the documented `sky_` prefix authenticate through Bearer authorization on
|
|
169
|
+
that endpoint.
|
|
170
|
+
|
|
171
|
+
### Setup
|
|
172
|
+
|
|
173
|
+
1. Create an account at [Subconscious](https://www.subconscious.dev/)
|
|
174
|
+
2. Generate an API key in the dashboard
|
|
175
|
+
3. Set the environment variable:
|
|
176
|
+
|
|
177
|
+
```bash
|
|
178
|
+
export SUBCONSCIOUS_API_KEY=...
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
### Verify
|
|
182
|
+
|
|
183
|
+
```bash
|
|
184
|
+
tau --model subconscious/subconscious/tim-qwen3.6-27b -p "Say hello"
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
### Notes
|
|
188
|
+
|
|
189
|
+
- The built-in model ID is `subconscious/tim-qwen3.6-27b`; the advertised `subconscious/glm-5.2` is omitted because the live API currently rejects it as an unknown model
|
|
190
|
+
- `TIM-Qwen3.6 27B` is published as multimodal with optional thinking; Tau enables its documented image modality and thinking selector
|
|
191
|
+
- Subconscious does not publish numeric context-window or maximum-output limits, so Tau leaves those fields unspecified rather than guessing
|
|
192
|
+
- Model availability and pricing come from the [official pricing page](https://www.subconscious.dev/pricing)
|
|
193
|
+
|
|
164
194
|
## Ollama (Local)
|
|
165
195
|
|
|
166
196
|
Run open-source models locally without API keys or internet.
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "tau-coding-agent"
|
|
7
|
-
version = "0.7.
|
|
7
|
+
version = "0.7.9"
|
|
8
8
|
description = "A self-extensible agent CLI with terminal UI, multi-provider LLM support, session management with branching, and a plugin system for tools and commands"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.12"
|
|
@@ -7349,4 +7349,19 @@ models = [
|
|
|
7349
7349
|
input=_TEXT_IMAGE,
|
|
7350
7350
|
output=_TEXT,
|
|
7351
7351
|
),
|
|
7352
|
+
# Subconscious. The provider publishes prices but not numeric context/output limits,
|
|
7353
|
+
# so leave context_window unknown (0) and retain Tau's conservative 16K output default.
|
|
7354
|
+
# Chat Completions is used because dashboard `sky_` keys authenticate through its
|
|
7355
|
+
# Bearer scheme; the same key is rejected by the Anthropic-compatible endpoint.
|
|
7356
|
+
Model(
|
|
7357
|
+
id="subconscious/tim-qwen3.6-27b",
|
|
7358
|
+
name="TIM-Qwen3.6 27B",
|
|
7359
|
+
provider="subconscious",
|
|
7360
|
+
cost=Cost(input=0.30, output=3.00, cache_read=0.15),
|
|
7361
|
+
thinking=True,
|
|
7362
|
+
thinking_format="chat-template",
|
|
7363
|
+
context_window=0,
|
|
7364
|
+
input=_TEXT_IMAGE,
|
|
7365
|
+
output=_TEXT,
|
|
7366
|
+
),
|
|
7352
7367
|
]
|
|
@@ -9,24 +9,9 @@ from tau.inference.provider.types import APIProvider
|
|
|
9
9
|
from tau.inference.types import AuthType, LLMOptions
|
|
10
10
|
|
|
11
11
|
api_providers = [
|
|
12
|
-
APIProvider(
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
api="openai_responses",
|
|
16
|
-
options=LLMOptions()
|
|
17
|
-
),
|
|
18
|
-
APIProvider(
|
|
19
|
-
id="anthropic",
|
|
20
|
-
name="Anthropic",
|
|
21
|
-
api="anthropic_messages",
|
|
22
|
-
options=LLMOptions()
|
|
23
|
-
),
|
|
24
|
-
APIProvider(
|
|
25
|
-
id="google",
|
|
26
|
-
name="Google",
|
|
27
|
-
api="gemini_generate",
|
|
28
|
-
options=LLMOptions()
|
|
29
|
-
),
|
|
12
|
+
APIProvider(id="openai", name="OpenAI", api="openai_responses", options=LLMOptions()),
|
|
13
|
+
APIProvider(id="anthropic", name="Anthropic", api="anthropic_messages", options=LLMOptions()),
|
|
14
|
+
APIProvider(id="google", name="Google", api="gemini_generate", options=LLMOptions()),
|
|
30
15
|
APIProvider(
|
|
31
16
|
id="google-vertex",
|
|
32
17
|
name="Google Vertex AI",
|
|
@@ -136,6 +121,12 @@ api_providers = [
|
|
|
136
121
|
api="openai_completions",
|
|
137
122
|
options=LLMOptions(base_url="https://router.huggingface.co/v1"),
|
|
138
123
|
),
|
|
124
|
+
APIProvider(
|
|
125
|
+
id="subconscious",
|
|
126
|
+
name="Subconscious",
|
|
127
|
+
api="openai_completions",
|
|
128
|
+
options=LLMOptions(base_url="https://api.subconscious.dev/v1"),
|
|
129
|
+
),
|
|
139
130
|
APIProvider(id="mistral", name="Mistral", api="mistral_chat", options=LLMOptions()),
|
|
140
131
|
APIProvider(
|
|
141
132
|
id="ollama",
|
|
@@ -283,15 +283,17 @@ class TextLLM:
|
|
|
283
283
|
)
|
|
284
284
|
from tau.inference.utils import ErrorKind, classify_error, get_retry_after_delay
|
|
285
285
|
|
|
286
|
+
api_key = await self._auth_manager.get_api_key(self.provider_id) # type: ignore[union-attr]
|
|
287
|
+
if api_key:
|
|
288
|
+
# Set credentials before resolving the lazy adapter: SDK clients such as
|
|
289
|
+
# Anthropic validate and capture authentication during construction.
|
|
290
|
+
self.api.options.api_key = api_key
|
|
291
|
+
|
|
286
292
|
# Resolve the provider SDK (first-use import + client construction) on a
|
|
287
293
|
# worker thread so a cold import doesn't block the event loop — and with
|
|
288
294
|
# it, the render loop's spinner animation.
|
|
289
295
|
await self.api.resolve_async()
|
|
290
296
|
|
|
291
|
-
api_key = await self._auth_manager.get_api_key(self.provider_id) # type: ignore[union-attr]
|
|
292
|
-
if api_key:
|
|
293
|
-
self.api.options.api_key = api_key
|
|
294
|
-
|
|
295
297
|
messages = self._resolve_messages(context)
|
|
296
298
|
api_context = LLMContext(
|
|
297
299
|
messages=messages,
|
|
@@ -399,15 +401,16 @@ class TextLLM:
|
|
|
399
401
|
from tau.inference.types import ErrorEvent, StopReason, ThinkingLevel
|
|
400
402
|
from tau.inference.utils import ErrorKind, classify_error, get_retry_after_delay
|
|
401
403
|
|
|
404
|
+
api_key = await self._auth_manager.get_api_key(self.provider_id) # type: ignore[union-attr]
|
|
405
|
+
if api_key:
|
|
406
|
+
# Set credentials before resolving the lazy adapter; see stream().
|
|
407
|
+
self.api.options.api_key = api_key
|
|
408
|
+
|
|
402
409
|
# Resolve the provider SDK (first-use import + client construction) on a
|
|
403
410
|
# worker thread so a cold import doesn't block the event loop — and with
|
|
404
411
|
# it, the render loop's spinner animation.
|
|
405
412
|
await self.api.resolve_async()
|
|
406
413
|
|
|
407
|
-
api_key = await self._auth_manager.get_api_key(self.provider_id) # type: ignore[union-attr]
|
|
408
|
-
if api_key:
|
|
409
|
-
self.api.options.api_key = api_key
|
|
410
|
-
|
|
411
414
|
original = self.api.options.thinking_level
|
|
412
415
|
if thinking_level is not None and thinking_level != ThinkingLevel.Off:
|
|
413
416
|
self.api.options.thinking_level = thinking_level
|
|
@@ -75,6 +75,16 @@ class AgentHookHandler:
|
|
|
75
75
|
self._pending_flush_handle: asyncio.TimerHandle | None = None
|
|
76
76
|
self._last_flush_at: float = 0.0
|
|
77
77
|
|
|
78
|
+
# Raw terminal/tool output arrives far more densely than model tokens
|
|
79
|
+
# (a chatty subprocess can emit hundreds of lines/sec — see
|
|
80
|
+
# runtime/service.py's per-line TerminalOutputEvent). Without batching,
|
|
81
|
+
# _on_terminal_output would invalidate() the block and force a full
|
|
82
|
+
# re-render on every single line, which is O(total output so far) each
|
|
83
|
+
# time and starves keystroke handling on the same event loop. Batched
|
|
84
|
+
# at the same ~60fps cadence as token streaming below.
|
|
85
|
+
self._pending_terminal_flush_handle: asyncio.TimerHandle | None = None
|
|
86
|
+
self._last_terminal_flush_at: float = 0.0
|
|
87
|
+
|
|
78
88
|
def subscribe(self) -> None:
|
|
79
89
|
"""Register all hook handlers on the current agent."""
|
|
80
90
|
agent = self._runtime.agent
|
|
@@ -105,6 +115,9 @@ class AgentHookHandler:
|
|
|
105
115
|
if self._pending_flush_handle is not None:
|
|
106
116
|
self._pending_flush_handle.cancel()
|
|
107
117
|
self._pending_flush_handle = None
|
|
118
|
+
if self._pending_terminal_flush_handle is not None:
|
|
119
|
+
self._pending_terminal_flush_handle.cancel()
|
|
120
|
+
self._pending_terminal_flush_handle = None
|
|
108
121
|
self._pending_msg = None
|
|
109
122
|
self._current_block = None
|
|
110
123
|
self._current_terminal_block = None
|
|
@@ -378,6 +391,13 @@ class AgentHookHandler:
|
|
|
378
391
|
block = self._layout.add_message(msg, streaming=True)
|
|
379
392
|
self._current_terminal_block = block
|
|
380
393
|
else:
|
|
394
|
+
# Cancel any pending batched flush — this event supersedes it, and
|
|
395
|
+
# finalize() below is about to freeze the block for good, so a
|
|
396
|
+
# stale timer must not fire and invalidate() it afterward.
|
|
397
|
+
if self._pending_terminal_flush_handle is not None:
|
|
398
|
+
self._pending_terminal_flush_handle.cancel()
|
|
399
|
+
self._pending_terminal_flush_handle = None
|
|
400
|
+
self._last_terminal_flush_at = 0.0
|
|
381
401
|
if self._current_terminal_block is not None:
|
|
382
402
|
self._current_terminal_block.set_streaming(False)
|
|
383
403
|
# Dropping our own reference for good right here — safe to
|
|
@@ -387,6 +407,30 @@ class AgentHookHandler:
|
|
|
387
407
|
self._tui.request_render()
|
|
388
408
|
|
|
389
409
|
async def _on_terminal_output(self, _event: object) -> None:
|
|
410
|
+
"""Batch invalidation of the live terminal block at ~60fps.
|
|
411
|
+
|
|
412
|
+
Raw subprocess output can arrive far more densely than model tokens
|
|
413
|
+
(runtime/service.py emits a TerminalOutputEvent per line — a chatty
|
|
414
|
+
command can be hundreds/sec). invalidate()-ing and re-rendering on
|
|
415
|
+
every line forces a full re-parse of the whole accumulated output
|
|
416
|
+
each time (cost grows with total output so far), and that work runs
|
|
417
|
+
synchronously on the same event loop that reads keystrokes — see
|
|
418
|
+
TUI._on_stdin_ready — so unthrottled it directly steals time from
|
|
419
|
+
input responsiveness. Mirrors the token-flush batching above.
|
|
420
|
+
"""
|
|
421
|
+
if self._current_terminal_block is None:
|
|
422
|
+
return
|
|
423
|
+
if self._pending_terminal_flush_handle is None:
|
|
424
|
+
elapsed = time.monotonic() - self._last_terminal_flush_at
|
|
425
|
+
delay = max(0.0, _STREAM_FLUSH_INTERVAL - elapsed)
|
|
426
|
+
loop = asyncio.get_event_loop()
|
|
427
|
+
self._pending_terminal_flush_handle = loop.call_later(
|
|
428
|
+
delay, self._flush_terminal_output
|
|
429
|
+
)
|
|
430
|
+
|
|
431
|
+
def _flush_terminal_output(self) -> None:
|
|
432
|
+
self._pending_terminal_flush_handle = None
|
|
433
|
+
self._last_terminal_flush_at = time.monotonic()
|
|
390
434
|
if self._current_terminal_block is not None:
|
|
391
435
|
self._current_terminal_block.invalidate()
|
|
392
436
|
self._tui.request_render()
|
|
@@ -470,15 +514,24 @@ class AgentHookHandler:
|
|
|
470
514
|
if self._current_block is None:
|
|
471
515
|
return
|
|
472
516
|
self._current_block._message = msg
|
|
517
|
+
if not streaming:
|
|
518
|
+
reset_streaming_md = getattr(
|
|
519
|
+
self._current_block,
|
|
520
|
+
"reset_streaming_markdown_cache",
|
|
521
|
+
None,
|
|
522
|
+
)
|
|
523
|
+
if callable(reset_streaming_md):
|
|
524
|
+
reset_streaming_md()
|
|
473
525
|
self._current_block.set_streaming(streaming)
|
|
474
526
|
self._current_block.invalidate()
|
|
475
527
|
if clear:
|
|
476
|
-
#
|
|
477
|
-
#
|
|
478
|
-
#
|
|
479
|
-
#
|
|
480
|
-
#
|
|
481
|
-
#
|
|
528
|
+
# The driver is dropping its live reference to this block at true
|
|
529
|
+
# message completion. Its content is now render-stable, so let
|
|
530
|
+
# MessageList freeze it immediately even if it is still the last
|
|
531
|
+
# unit. This does not make ctrl+o/theme/session changes impossible:
|
|
532
|
+
# those paths explicitly invalidate frozen caches from the touched
|
|
533
|
+
# block and rebuild on demand.
|
|
534
|
+
self._current_block.finalize()
|
|
482
535
|
self._current_block = None
|
|
483
536
|
self._current_text_length = 0
|
|
484
537
|
|
{tau_coding_agent-0.7.8 → tau_coding_agent-0.7.9}/tau/modes/interactive/components/message_list.py
RENAMED
|
@@ -7,7 +7,7 @@ from tau.tui.buffer import Buffer
|
|
|
7
7
|
from tau.tui.component import Component, StaticComponent
|
|
8
8
|
from tau.tui.geometry import Rect
|
|
9
9
|
from tau.tui.input import InputEvent, Key, KeyEvent, get_keybindings
|
|
10
|
-
from tau.tui.markdown import render_markdown
|
|
10
|
+
from tau.tui.markdown import StreamingMarkdownRenderer, render_markdown
|
|
11
11
|
from tau.tui.style import Style, apply_style
|
|
12
12
|
from tau.tui.theme import MessageTheme
|
|
13
13
|
from tau.tui.utils import BOLD, RESET, _is_diff, cursor_block, visible_width, wrap
|
|
@@ -108,6 +108,10 @@ class MessageBlock:
|
|
|
108
108
|
self._tool_results_cache: list[str] | None = None
|
|
109
109
|
self._tool_results_message: object | None = None
|
|
110
110
|
self._tool_results_width = 0
|
|
111
|
+
# Incremental markdown renderers for append-only streaming text/thinking
|
|
112
|
+
# content. They keep full streamed output visible while avoiding a full
|
|
113
|
+
# CommonMark parse of the whole growing response on every frame.
|
|
114
|
+
self._streaming_markdown: dict[tuple[int, bool], StreamingMarkdownRenderer] = {}
|
|
111
115
|
|
|
112
116
|
# -------------------------------------------------------------------------
|
|
113
117
|
# Public API
|
|
@@ -123,6 +127,13 @@ class MessageBlock:
|
|
|
123
127
|
self._tool_results_cache = None
|
|
124
128
|
self._tool_results_message = None
|
|
125
129
|
|
|
130
|
+
def reset_streaming_markdown_cache(self) -> None:
|
|
131
|
+
"""Drop incremental markdown state for this block.
|
|
132
|
+
|
|
133
|
+
Used when a streamed message completes so the final render goes through
|
|
134
|
+
the normal whole-document path exactly once.
|
|
135
|
+
"""
|
|
136
|
+
self._streaming_markdown.clear()
|
|
126
137
|
def toggle_expanded(self) -> None:
|
|
127
138
|
self._expanded = not self._expanded
|
|
128
139
|
self.invalidate()
|
|
@@ -221,6 +232,33 @@ class MessageBlock:
|
|
|
221
232
|
def message(self) -> object:
|
|
222
233
|
return self._message
|
|
223
234
|
|
|
235
|
+
def _render_markdown_text(
|
|
236
|
+
self,
|
|
237
|
+
key: tuple[int, bool],
|
|
238
|
+
text: str,
|
|
239
|
+
width: int,
|
|
240
|
+
*,
|
|
241
|
+
preserve_soft_breaks: bool = False,
|
|
242
|
+
) -> list[str]:
|
|
243
|
+
"""Render markdown, using append-only incremental caching while streaming."""
|
|
244
|
+
if self._streaming:
|
|
245
|
+
renderer = self._streaming_markdown.get(key)
|
|
246
|
+
if renderer is None:
|
|
247
|
+
renderer = StreamingMarkdownRenderer()
|
|
248
|
+
self._streaming_markdown[key] = renderer
|
|
249
|
+
return renderer.render(
|
|
250
|
+
text,
|
|
251
|
+
width,
|
|
252
|
+
self._theme.markdown,
|
|
253
|
+
preserve_soft_breaks=preserve_soft_breaks,
|
|
254
|
+
)
|
|
255
|
+
return render_markdown(
|
|
256
|
+
text,
|
|
257
|
+
width,
|
|
258
|
+
self._theme.markdown,
|
|
259
|
+
preserve_soft_breaks=preserve_soft_breaks,
|
|
260
|
+
)
|
|
261
|
+
|
|
224
262
|
# -------------------------------------------------------------------------
|
|
225
263
|
# Rendering
|
|
226
264
|
# -------------------------------------------------------------------------
|
|
@@ -407,10 +445,10 @@ class MessageBlock:
|
|
|
407
445
|
thinking_idx += 1
|
|
408
446
|
thinking_text = "".join(thinking_parts).rstrip()
|
|
409
447
|
thinking_lines = (
|
|
410
|
-
|
|
448
|
+
self._render_markdown_text(
|
|
449
|
+
(idx, True),
|
|
411
450
|
thinking_text,
|
|
412
451
|
inner_width,
|
|
413
|
-
t.markdown,
|
|
414
452
|
preserve_soft_breaks=True,
|
|
415
453
|
)
|
|
416
454
|
if thinking_text
|
|
@@ -437,7 +475,11 @@ class MessageBlock:
|
|
|
437
475
|
lines.append("")
|
|
438
476
|
|
|
439
477
|
elif isinstance(item, TextContent) and item.content:
|
|
440
|
-
for line in
|
|
478
|
+
for line in self._render_markdown_text(
|
|
479
|
+
(idx, False),
|
|
480
|
+
item.content.rstrip(),
|
|
481
|
+
inner_width,
|
|
482
|
+
):
|
|
441
483
|
lines.append(" " + line)
|
|
442
484
|
|
|
443
485
|
elif isinstance(item, _ImageContent):
|
|
@@ -960,13 +1002,19 @@ class MessageList(Component):
|
|
|
960
1002
|
this should rarely trigger. If it ever does (e.g. a render happened
|
|
961
1003
|
to land between adding a block and an immediate undo), resetting here
|
|
962
1004
|
forces one full rebuild rather than leaving the cache pointing past
|
|
963
|
-
the end of self._blocks.
|
|
1005
|
+
the end of self._blocks. Must bump frozen_generation too — its
|
|
1006
|
+
contract (see the field's docstring) is "bumped every time
|
|
1007
|
+
_frozen_buf is rebuilt from scratch", and callers like
|
|
1008
|
+
TUI.render_cells cache pre-widened frozen rows keyed on this counter;
|
|
1009
|
+
resetting _frozen_buf without it would let that cache keep serving
|
|
1010
|
+
now-stale content for a unit that no longer exists.
|
|
964
1011
|
"""
|
|
965
1012
|
if self._frozen_block_count > len(self._blocks):
|
|
966
1013
|
self._frozen_buf = None
|
|
967
1014
|
self._frozen_block_count = 0
|
|
968
1015
|
self._frozen_unit_ends = []
|
|
969
1016
|
self._frozen_unit_rows = []
|
|
1017
|
+
self.frozen_generation += 1
|
|
970
1018
|
|
|
971
1019
|
def remove_last(self) -> bool:
|
|
972
1020
|
"""Remove the last block (used to undo a user message on pre-stream abort)."""
|
|
@@ -1003,6 +1051,11 @@ class MessageList(Component):
|
|
|
1003
1051
|
self._frozen_block_count = 0
|
|
1004
1052
|
self._frozen_unit_ends = []
|
|
1005
1053
|
self._frozen_unit_rows = []
|
|
1054
|
+
# See _guard_frozen_bounds: any reset of _frozen_buf must bump this so
|
|
1055
|
+
# callers caching pre-widened frozen rows keyed on it (TUI.render_cells)
|
|
1056
|
+
# drop their now-stale cache instead of continuing to serve rows from
|
|
1057
|
+
# the conversation that was just cleared.
|
|
1058
|
+
self.frozen_generation += 1
|
|
1006
1059
|
|
|
1007
1060
|
def add_message(self, message: object, streaming: bool = False) -> MessageBlock:
|
|
1008
1061
|
block = MessageBlock(
|
|
@@ -200,15 +200,136 @@ def render_markdown(
|
|
|
200
200
|
preserve_soft_breaks: bool = False,
|
|
201
201
|
) -> list[str]:
|
|
202
202
|
"""Render a markdown string to a list of ANSI-coloured terminal lines."""
|
|
203
|
+
return _render_markdown(text, width, theme, preserve_soft_breaks=preserve_soft_breaks)
|
|
204
|
+
|
|
205
|
+
|
|
206
|
+
def _render_markdown(
|
|
207
|
+
text: str,
|
|
208
|
+
width: int,
|
|
209
|
+
theme: MarkdownTheme,
|
|
210
|
+
*,
|
|
211
|
+
preserve_soft_breaks: bool = False,
|
|
212
|
+
trim_trailing_blank_lines: bool = True,
|
|
213
|
+
) -> list[str]:
|
|
203
214
|
document, html_block, html_span, md_context = _mistletoe()
|
|
204
215
|
with md_context(html_span, html_block):
|
|
205
216
|
doc = document(text.splitlines(keepends=True))
|
|
206
217
|
lines = _Renderer(width, theme, preserve_soft_breaks).render_blocks(doc.children or [])
|
|
207
|
-
|
|
208
|
-
lines
|
|
218
|
+
if trim_trailing_blank_lines:
|
|
219
|
+
while lines and lines[-1] == "":
|
|
220
|
+
lines.pop()
|
|
209
221
|
return lines
|
|
210
222
|
|
|
211
223
|
|
|
224
|
+
class StreamingMarkdownRenderer:
|
|
225
|
+
"""Incremental renderer for append-only streamed markdown.
|
|
226
|
+
|
|
227
|
+
A normal ``render_markdown(growing_text, ...)`` call reparses the entire
|
|
228
|
+
CommonMark document every frame. For long streamed replies that becomes
|
|
229
|
+
O(total_response_size) on the UI event loop and can delay keystroke echo.
|
|
230
|
+
|
|
231
|
+
This cache freezes complete top-level block groups once a blank-line
|
|
232
|
+
boundary has moved behind the live tail, then reparses only the still-open
|
|
233
|
+
suffix on subsequent frames. The final non-streaming render should still
|
|
234
|
+
call ``render_markdown`` once for exact whole-document semantics.
|
|
235
|
+
"""
|
|
236
|
+
|
|
237
|
+
def __init__(self) -> None:
|
|
238
|
+
self._width = -1
|
|
239
|
+
self._theme_id = 0
|
|
240
|
+
self._preserve_soft_breaks = False
|
|
241
|
+
self._text = ""
|
|
242
|
+
self._frozen_until = 0
|
|
243
|
+
self._frozen_lines: list[str] = []
|
|
244
|
+
|
|
245
|
+
def reset(self) -> None:
|
|
246
|
+
self._text = ""
|
|
247
|
+
self._frozen_until = 0
|
|
248
|
+
self._frozen_lines = []
|
|
249
|
+
|
|
250
|
+
def render(
|
|
251
|
+
self,
|
|
252
|
+
text: str,
|
|
253
|
+
width: int,
|
|
254
|
+
theme: MarkdownTheme,
|
|
255
|
+
*,
|
|
256
|
+
preserve_soft_breaks: bool = False,
|
|
257
|
+
) -> list[str]:
|
|
258
|
+
theme_id = id(theme)
|
|
259
|
+
if (
|
|
260
|
+
width != self._width
|
|
261
|
+
or theme_id != self._theme_id
|
|
262
|
+
or preserve_soft_breaks != self._preserve_soft_breaks
|
|
263
|
+
or not text.startswith(self._text)
|
|
264
|
+
):
|
|
265
|
+
self._width = width
|
|
266
|
+
self._theme_id = theme_id
|
|
267
|
+
self._preserve_soft_breaks = preserve_soft_breaks
|
|
268
|
+
self.reset()
|
|
269
|
+
|
|
270
|
+
self._text = text
|
|
271
|
+
freeze_until = _streaming_markdown_freeze_cutoff(text)
|
|
272
|
+
if freeze_until > self._frozen_until:
|
|
273
|
+
newly_stable = text[self._frozen_until:freeze_until]
|
|
274
|
+
rendered = _render_markdown(
|
|
275
|
+
newly_stable,
|
|
276
|
+
width,
|
|
277
|
+
theme,
|
|
278
|
+
preserve_soft_breaks=preserve_soft_breaks,
|
|
279
|
+
)
|
|
280
|
+
if rendered:
|
|
281
|
+
if self._frozen_lines and self._frozen_lines[-1] != "":
|
|
282
|
+
self._frozen_lines.append("")
|
|
283
|
+
self._frozen_lines.extend(rendered)
|
|
284
|
+
# Preserve the block separator represented by the stable blank
|
|
285
|
+
# boundary; render_markdown trims it for full-document display.
|
|
286
|
+
if self._frozen_lines[-1] != "":
|
|
287
|
+
self._frozen_lines.append("")
|
|
288
|
+
self._frozen_until = freeze_until
|
|
289
|
+
|
|
290
|
+
tail = text[self._frozen_until :]
|
|
291
|
+
tail_lines = _render_markdown(
|
|
292
|
+
tail,
|
|
293
|
+
width,
|
|
294
|
+
theme,
|
|
295
|
+
preserve_soft_breaks=preserve_soft_breaks,
|
|
296
|
+
)
|
|
297
|
+
if not tail_lines:
|
|
298
|
+
frozen = self._frozen_lines
|
|
299
|
+
return list(frozen[:-1] if frozen[-1:] == [""] else frozen)
|
|
300
|
+
return [*self._frozen_lines, *tail_lines]
|
|
301
|
+
|
|
302
|
+
|
|
303
|
+
def _streaming_markdown_freeze_cutoff(text: str) -> int:
|
|
304
|
+
"""Return an append-only cutoff for completed top-level markdown blocks.
|
|
305
|
+
|
|
306
|
+
During streaming, only the current open block needs to remain live. Once a
|
|
307
|
+
blank-line boundary is seen outside a fenced code block, the block before
|
|
308
|
+
that boundary is structurally complete for the common assistant-output cases
|
|
309
|
+
we render here (paragraphs, headings, lists, tables, quotes, fenced code).
|
|
310
|
+
Freezing up to the latest such boundary keeps active streaming work bounded
|
|
311
|
+
to the current block instead of the whole reply.
|
|
312
|
+
"""
|
|
313
|
+
boundaries: list[int] = []
|
|
314
|
+
in_fence = False
|
|
315
|
+
fence_marker = ""
|
|
316
|
+
pos = 0
|
|
317
|
+
for line in text.splitlines(keepends=True):
|
|
318
|
+
stripped = line.strip()
|
|
319
|
+
if stripped.startswith(("```", "~~~")):
|
|
320
|
+
marker = stripped[:3]
|
|
321
|
+
if not in_fence:
|
|
322
|
+
in_fence = True
|
|
323
|
+
fence_marker = marker
|
|
324
|
+
elif marker == fence_marker:
|
|
325
|
+
in_fence = False
|
|
326
|
+
fence_marker = ""
|
|
327
|
+
pos += len(line)
|
|
328
|
+
if not in_fence and stripped == "":
|
|
329
|
+
boundaries.append(pos)
|
|
330
|
+
return boundaries[-1] if boundaries else 0
|
|
331
|
+
|
|
332
|
+
|
|
212
333
|
# ── Renderer ──────────────────────────────────────────────────────────────────
|
|
213
334
|
|
|
214
335
|
|