tau-coding-agent 0.7.2__tar.gz → 0.7.3__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.2/tau_coding_agent.egg-info → tau_coding_agent-0.7.3}/PKG-INFO +1 -1
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/docs/auth.md +1 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/docs/inference-providers.md +30 -1
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/pyproject.toml +1 -1
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/agent/prompt/builder.py +1 -1
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/agent/service.py +4 -1
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/extensions/ask_user/component.py +43 -24
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/extensions/ask_user/tool.py +3 -4
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/extensions/footer/__init__.py +16 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/extensions/footer/model.py +16 -2
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/extensions/loop/__init__.py +21 -6
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/extensions/loop/duration.py +6 -7
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/extensions/loop/state.py +16 -8
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/extensions/subagent/subagent_schema.py +3 -9
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/extensions/todo/__init__.py +10 -9
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/extensions/todo/todo_schema.py +3 -1
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/extensions/todo/todo_tool.py +12 -4
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/models/text.py +715 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/providers/text.py +6 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/tools/grep.py +6 -3
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/tools/ls.py +1 -1
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/tools/read.py +3 -1
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/tools/utils.py +0 -1
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/engine/service.py +3 -1
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/hooks/service.py +3 -1
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/inference/api/text/gemini_generate.py +13 -3
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/inference/api/text/google_antigravity.py +35 -3
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/inference/api/text/google_vertex.py +10 -2
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/inference/api/text/mistral_chat.py +8 -1
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/inference/api/text/openai_vertex.py +5 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/inference/provider/oauth/anthropic_claude_code.py +17 -4
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/inference/provider/oauth/xai_grok.py +5 -4
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/modes/interactive/agent_hooks.py +20 -3
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/modes/interactive/commands/session.py +1 -3
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/modes/interactive/components/message_list.py +1 -1
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/modes/interactive/components/settings_selector.py +6 -1
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/tui/components/spinner.py +86 -1
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/tui/theme.py +2 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/utils/format.py +8 -2
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3/tau_coding_agent.egg-info}/PKG-INFO +1 -1
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_builtin_tools.py +2 -1
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_compaction.py +2 -4
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_engine_length_and_live_tools.py +3 -1
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_gemini_generate.py +3 -1
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_google_antigravity.py +13 -7
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_google_vertex.py +7 -2
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_subagent_context.py +100 -45
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_text_input.py +3 -1
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_tree_branch_restore.py +3 -1
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/LICENSE +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/MANIFEST.in +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/README.md +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/docs/architecture.md +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/docs/cli-reference.md +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/docs/creating-tools.md +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/docs/development.md +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/docs/docs.json +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/docs/engine.md +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/docs/extension-settings.md +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/docs/extensions.md +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/docs/http-proxy.md +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/docs/index.md +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/docs/inference.md +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/docs/installation.md +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/docs/keybindings.md +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/docs/messages.md +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/docs/project-context.md +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/docs/project-structure.md +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/docs/prompts.md +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/docs/python-api.md +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/docs/quickstart.md +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/docs/sessions.md +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/docs/settings.md +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/docs/skills.md +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/docs/themes.md +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/docs/tools.md +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/docs/tui.md +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/docs/usage.md +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/setup.cfg +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/__init__.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/agent/__init__.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/agent/embedded.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/agent/prompt/__init__.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/agent/prompt/types.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/agent/types.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/auth/manager.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/auth/storage.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/auth/types.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/__init__.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/commands/__init__.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/commands/clear.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/commands/compact.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/commands/reload.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/commands/session.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/extensions/ask_user/__init__.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/extensions/ask_user/manifest.json +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/extensions/ask_user/schema.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/extensions/btw/__init__.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/extensions/footer/git.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/extensions/footer/utils.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/extensions/header/__init__.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/extensions/loop/README.md +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/extensions/loop/dispatch.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/extensions/sandbox/__init__.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/extensions/sandbox/manager.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/extensions/sandbox/manifest.json +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/extensions/sandbox/sandbox_tool.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/extensions/subagent/__init__.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/extensions/subagent/agents/context-builder.md +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/extensions/subagent/agents/delegate.md +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/extensions/subagent/agents/oracle.md +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/extensions/subagent/agents/planner.md +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/extensions/subagent/agents/researcher.md +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/extensions/subagent/agents/reviewer.md +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/extensions/subagent/agents/scout.md +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/extensions/subagent/agents/worker.md +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/extensions/subagent/agents.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/extensions/subagent/manifest.json +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/extensions/subagent/subagent_tool.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/extensions/todo/manifest.json +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/extensions/watch/__init__.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/extensions/web/__init__.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/extensions/web/engines/__init__.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/extensions/web/engines/base.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/extensions/web/engines/ddgs_engine.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/extensions/web/engines/exa_engine.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/extensions/web/engines/jina_engine.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/extensions/web/engines/tavily_engine.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/extensions/web/manifest.json +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/extensions/web/tools/__init__.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/extensions/web/tools/fetch.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/extensions/web/tools/search.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/extensions/workflow/__init__.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/extensions/workflow/agent_discovery.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/extensions/workflow/manifest.json +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/extensions/workflow/model.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/extensions/workflow/runner.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/extensions/workflow/skills/create-workflows/SKILL.md +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/extensions/workflow/store.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/models/__init__.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/models/audio.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/models/image.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/models/video.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/prompts/commit.md +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/prompts/docs.md +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/prompts/explain.md +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/prompts/fix.md +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/prompts/refactor.md +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/prompts/review.md +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/prompts/test.md +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/providers/__init__.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/providers/audio.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/providers/image.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/providers/video.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/skills/code-review/SKILL.md +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/skills/debug/SKILL.md +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/skills/git-commit/SKILL.md +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/skills/skill-creator/LICENSE.txt +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/skills/skill-creator/SKILL.md +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/themes/ayu-dark.yaml +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/themes/catppuccin.yaml +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/themes/dark.yaml +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/themes/dracula.yaml +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/themes/everforest.yaml +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/themes/gruvbox.yaml +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/themes/horizon.yaml +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/themes/kanagawa.yaml +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/themes/light.yaml +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/themes/material-ocean.yaml +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/themes/monokai.yaml +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/themes/night-owl.yaml +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/themes/nord.yaml +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/themes/one-dark.yaml +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/themes/rose-pine.yaml +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/themes/solarized-dark.yaml +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/themes/tokyo-night.yaml +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/tools/__init__.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/tools/edit.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/tools/glob.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/tools/terminal.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/tools/write.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/commands/__init__.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/commands/registry.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/commands/types.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/console/__init__.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/console/cli.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/console/commands/__init__.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/console/commands/auth.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/console/commands/packages.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/console/commands/update.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/core/__init__.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/core/registry.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/engine/__init__.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/engine/types.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/extensions/__init__.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/extensions/api.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/extensions/context.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/extensions/loader.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/extensions/runtime.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/extensions/settings.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/hooks/__init__.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/hooks/engine.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/hooks/inference.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/hooks/runtime.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/hooks/session.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/hooks/tui.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/hooks/types.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/inference/__init__.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/inference/api/__init__.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/inference/api/audio/__init__.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/inference/api/audio/base.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/inference/api/audio/builtins.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/inference/api/audio/elevenlabs_audio.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/inference/api/audio/gemini_audio.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/inference/api/audio/openai_audio.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/inference/api/audio/registry.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/inference/api/audio/sarvam_audio.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/inference/api/audio/service.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/inference/api/audio/utils.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/inference/api/availability.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/inference/api/image/__init__.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/inference/api/image/base.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/inference/api/image/builtins.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/inference/api/image/gemini_image.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/inference/api/image/openai_image.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/inference/api/image/openrouter.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/inference/api/image/registry.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/inference/api/image/service.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/inference/api/registry.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/inference/api/text/__init__.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/inference/api/text/anthropic_claude_code.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/inference/api/text/anthropic_messages.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/inference/api/text/anthropic_vertex.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/inference/api/text/base.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/inference/api/text/builtins.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/inference/api/text/dialect.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/inference/api/text/github_copilot_chat.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/inference/api/text/ollama_chat.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/inference/api/text/openai_codex_responses.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/inference/api/text/openai_completions.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/inference/api/text/openai_responses.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/inference/api/text/registry.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/inference/api/text/service.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/inference/api/text/types.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/inference/api/text/utils.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/inference/api/text/xai_responses.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/inference/api/video/__init__.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/inference/api/video/base.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/inference/api/video/builtins.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/inference/api/video/fal_video.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/inference/api/video/openrouter_video.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/inference/api/video/registry.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/inference/api/video/service.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/inference/api/video/zai_video.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/inference/model/__init__.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/inference/model/registry.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/inference/model/types.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/inference/provider/__init__.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/inference/provider/oauth/__init__.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/inference/provider/oauth/github_copilot.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/inference/provider/oauth/google_antigravity.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/inference/provider/oauth/openai_codex.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/inference/provider/oauth/pkce.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/inference/provider/oauth/types.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/inference/provider/oauth/utils.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/inference/provider/registry.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/inference/provider/types.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/inference/types.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/inference/utils.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/message/__init__.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/message/types.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/message/utils.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/modes/__init__.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/modes/interactive/__init__.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/modes/interactive/app.py +1 -1
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/modes/interactive/commands/__init__.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/modes/interactive/commands/appearance.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/modes/interactive/commands/auth.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/modes/interactive/commands/context.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/modes/interactive/commands/extensions.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/modes/interactive/commands/misc.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/modes/interactive/commands/model.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/modes/interactive/components/__init__.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/modes/interactive/components/command_palette.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/modes/interactive/components/config_selector.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/modes/interactive/components/extension_selector.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/modes/interactive/components/file_picker.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/modes/interactive/components/layout.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/modes/interactive/components/model_selector.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/modes/interactive/components/oauth_selector.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/modes/interactive/components/overlays.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/modes/interactive/components/selector_controller.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/modes/interactive/components/session_selector.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/modes/interactive/components/theme_selector.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/modes/interactive/components/thinking_selector.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/modes/interactive/components/tree_selector.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/modes/interactive/components/trust_screen.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/modes/interactive/components/voice_selector.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/modes/interactive/input_handler.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/modes/interactive/ui_context.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/modes/print/__init__.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/modes/rpc/__init__.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/modes/rpc/mode.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/modes/rpc/types.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/packages/__init__.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/packages/manager.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/packages/types.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/packages/utils.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/prompts/expand.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/prompts/loader.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/prompts/registry.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/prompts/types.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/resources/__init__.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/resources/loader.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/resources/types.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/runtime/dependencies.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/runtime/service.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/runtime/types.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/session/branch_summarization.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/session/compaction.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/session/manager.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/session/types.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/session/utils.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/settings/manager.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/settings/paths.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/settings/storage.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/settings/types.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/settings/utils.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/skills/loader.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/skills/registry.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/skills/types.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/telemetry/__init__.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/telemetry/service.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/telemetry/types.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/themes/loader.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/themes/registry.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/themes/types.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/tool/__init__.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/tool/registry.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/tool/render.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/tool/types.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/trust/__init__.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/trust/manager.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/trust/types.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/trust/utils.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/tui/__init__.py +1 -1
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/tui/ansi_bridge.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/tui/autocomplete.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/tui/backend.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/tui/buffer.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/tui/component.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/tui/components/__init__.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/tui/components/box.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/tui/components/editor.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/tui/components/image.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/tui/components/select_list.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/tui/components/simple_picker.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/tui/components/text_input.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/tui/components/widget_bridge.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/tui/frame.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/tui/geometry.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/tui/input.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/tui/keybinding_hints.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/tui/layout.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/tui/markdown.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/tui/palette.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/tui/service.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/tui/style.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/tui/terminal.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/tui/testing.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/tui/text.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/tui/utils.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/tui/widget.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/tui/widgets/__init__.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/tui/widgets/barchart.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/tui/widgets/block.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/tui/widgets/calendar.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/tui/widgets/canvas.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/tui/widgets/chart.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/tui/widgets/clear.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/tui/widgets/gauge.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/tui/widgets/list.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/tui/widgets/paragraph.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/tui/widgets/scrollbar.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/tui/widgets/sparkline.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/tui/widgets/symbols.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/tui/widgets/table.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/tui/widgets/tabs.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/utils/__init__.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/utils/http_proxy.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/utils/image_processing.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/utils/secrets.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/utils/version_check.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau_coding_agent.egg-info/SOURCES.txt +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau_coding_agent.egg-info/dependency_links.txt +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau_coding_agent.egg-info/entry_points.txt +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau_coding_agent.egg-info/requires.txt +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau_coding_agent.egg-info/top_level.txt +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_agent_compaction.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_agent_hooks.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_agent_prompt.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_agent_types.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_ansi.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_ansi_bridge_legacy_image.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_anthropic_tool_history.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_ask_user_extension.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_audio_transcription_apis.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_auth_command.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_auth_manager.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_auth_storage.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_autocomplete_modifiers.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_branch_navigation.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_branch_summarization.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_builtin_watch.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_cli_inputs.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_cmd_copy.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_command_execution_policy.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_command_registry.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_component_buffer_bridge.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_diff.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_editor_protocol.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_engine_execution.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_engine_steering.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_engine_types.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_escape_behavior.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_extension_api.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_extension_lifecycle.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_footer_model.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_footer_utils.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_fuzzy.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_http_proxy.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_image_processing.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_inference_api_text_utils.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_inference_dialect.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_inference_error_utils.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_inference_types.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_inference_utils.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_keybindings.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_layout_render_cells.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_markdown.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_message_list_frozen.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_message_types.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_message_utils.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_model_availability.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_model_command.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_model_registry.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_model_selector_modal.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_model_types.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_oauth_utils.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_package_resources.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_packages_utils.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_peer_extension.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_pkce.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_prompts_expand.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_prompts_loader.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_prompts_registry.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_provider_registry.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_resource_loader.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_rpc_mode.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_runtime_sdk.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_scrollback_raw_writes.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_scrollback_terminal.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_secrets.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_select_list_render_cells.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_selector_controller.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_session_manager.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_session_trust_persist.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_session_types.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_session_utils.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_settings_manager.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_settings_paths.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_settings_storage.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_settings_utils.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_skills_loader.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_skills_registry.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_strip_control_chars.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_telemetry.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_text_input_render_cells.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_text_llm_invoke.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_text_llm_model_resolution.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_theme_loader.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_themes_registry.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_thinking_render.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_tool_registry.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_tool_render.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_trust_manager.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_trust_utils.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_tui_capabilities.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_tui_child_rows.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_tui_input.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_tui_layout_sizing.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_tui_public_api.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_tui_renderer.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_tui_select_list.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_tui_theme.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_tui_utils.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_ui_context.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_utils_hashline.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tests/test_version_check.py +0 -0
- {tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/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.3
|
|
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
|
|
@@ -144,6 +144,7 @@ The provider ID used as the key in `auth.json` and the `{PROVIDER}_API_KEY` env
|
|
|
144
144
|
| Google | `google` | `GOOGLE_API_KEY` |
|
|
145
145
|
| Mistral | `mistral` | `MISTRAL_API_KEY` |
|
|
146
146
|
| Fireworks AI | `fireworks` | `FIREWORKS_API_KEY` |
|
|
147
|
+
| Hugging Face | `huggingface` | `HUGGINGFACE_API_KEY` |
|
|
147
148
|
| Ollama | `ollama` | `OLLAMA_API_KEY` |
|
|
148
149
|
|
|
149
150
|
## Next Steps
|
|
@@ -8,7 +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`, and
|
|
11
|
+
`cerebras`, `deepseek`, `zai`, `kilocode`, `fireworks`, `huggingface`, and
|
|
12
|
+
`mistral`.
|
|
12
13
|
|
|
13
14
|
Tau also includes local `ollama`, Google/Anthropic/OpenAI-compatible Vertex AI
|
|
14
15
|
providers, and OAuth providers for OpenAI Codex, Claude Code, GitHub Copilot,
|
|
@@ -132,6 +133,34 @@ tau --model fireworks/accounts/fireworks/models/llama-v3p3-70b-instruct -p "Say
|
|
|
132
133
|
- Uses the OpenAI-compatible completions API under the hood
|
|
133
134
|
- Session affinity is maintained automatically via a per-request `x-session-affinity` header
|
|
134
135
|
|
|
136
|
+
## Hugging Face
|
|
137
|
+
|
|
138
|
+
Hugging Face's Inference Providers router gives OpenAI-compatible access to
|
|
139
|
+
open-source models (DeepSeek, Llama, Qwen, Mixtral, and more) hosted across
|
|
140
|
+
its partner inference providers.
|
|
141
|
+
|
|
142
|
+
### Setup
|
|
143
|
+
|
|
144
|
+
1. Create an account at [Hugging Face](https://huggingface.co)
|
|
145
|
+
2. Generate an access token at [huggingface.co/settings/tokens](https://huggingface.co/settings/tokens) (a `read` token is sufficient)
|
|
146
|
+
3. Set the environment variable:
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
export HUGGINGFACE_API_KEY=hf_...
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
### Verify
|
|
153
|
+
|
|
154
|
+
```bash
|
|
155
|
+
tau --model huggingface/deepseek-ai/DeepSeek-V3-0324 -p "Say hello"
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
### Notes
|
|
159
|
+
|
|
160
|
+
- Uses the OpenAI-compatible completions API under the hood, routed through `https://router.huggingface.co/v1`
|
|
161
|
+
- Model IDs are Hugging Face Hub repo IDs (e.g. `meta-llama/Llama-3.3-70B-Instruct`)
|
|
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
|
+
|
|
135
164
|
## Ollama (Local)
|
|
136
165
|
|
|
137
166
|
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.3"
|
|
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"
|
|
@@ -225,7 +225,7 @@ def _detect_shell() -> str:
|
|
|
225
225
|
if shell:
|
|
226
226
|
return Path(shell).name
|
|
227
227
|
if sys.platform == "win32":
|
|
228
|
-
if os.environ.get("PSModulePath"):
|
|
228
|
+
if os.environ.get("PSModulePath"): # noqa: SIM112 — actual Windows env var casing
|
|
229
229
|
return "powershell"
|
|
230
230
|
comspec = os.environ.get("COMSPEC", "")
|
|
231
231
|
return Path(comspec).stem if comspec else "cmd"
|
|
@@ -544,7 +544,10 @@ class Agent:
|
|
|
544
544
|
last = self._session_manager.find_last_assistant_message()
|
|
545
545
|
if last is None:
|
|
546
546
|
return False
|
|
547
|
-
if
|
|
547
|
+
if (
|
|
548
|
+
last.error_kind != ErrorKind.CONTEXT_OVERFLOW
|
|
549
|
+
and not self._estimate_indicates_overflow()
|
|
550
|
+
):
|
|
548
551
|
return False
|
|
549
552
|
|
|
550
553
|
# Model-switch guard: the overflow error is from a different model if it predates
|
{tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/extensions/ask_user/component.py
RENAMED
|
@@ -7,6 +7,8 @@ from schema import FREEFORM_LABEL, AskUserOption # type: ignore[import-not-foun
|
|
|
7
7
|
|
|
8
8
|
from tau.tui.component import Component
|
|
9
9
|
from tau.tui.input import InputEvent, KeyEvent
|
|
10
|
+
from tau.tui.style import RESET
|
|
11
|
+
from tau.tui.theme import LayoutTheme
|
|
10
12
|
|
|
11
13
|
if TYPE_CHECKING:
|
|
12
14
|
from tau.tui.buffer import Buffer
|
|
@@ -48,6 +50,7 @@ class _AskUserComponent(Component):
|
|
|
48
50
|
allow_freeform: bool,
|
|
49
51
|
multiline: bool,
|
|
50
52
|
on_done: Any,
|
|
53
|
+
theme: LayoutTheme | None = None,
|
|
51
54
|
) -> None:
|
|
52
55
|
self._question = question
|
|
53
56
|
self._context = context
|
|
@@ -56,6 +59,7 @@ class _AskUserComponent(Component):
|
|
|
56
59
|
self._allow_freeform = allow_freeform
|
|
57
60
|
self._multiline = multiline
|
|
58
61
|
self._on_done = on_done
|
|
62
|
+
self._theme = theme or LayoutTheme()
|
|
59
63
|
|
|
60
64
|
self._cursor = 0
|
|
61
65
|
self._checked: set[int] = set()
|
|
@@ -102,12 +106,13 @@ class _AskUserComponent(Component):
|
|
|
102
106
|
row += parse_ansi_wrapped_into(buf, x, y + row, line, width)
|
|
103
107
|
return row
|
|
104
108
|
|
|
109
|
+
t = self._theme
|
|
105
110
|
header: list[str] = []
|
|
106
111
|
if self._context:
|
|
107
112
|
for line in self._context.splitlines():
|
|
108
|
-
header.append(f"
|
|
113
|
+
header.append(f" {t.muted.sgr()}{line}{RESET}")
|
|
109
114
|
header.append("")
|
|
110
|
-
header.append(f"
|
|
115
|
+
header.append(f" {t.accent.sgr()}{self._question}{RESET}")
|
|
111
116
|
header.append("")
|
|
112
117
|
|
|
113
118
|
header_rows = _write(header, area.x, area.y, area.width)
|
|
@@ -135,7 +140,9 @@ class _AskUserComponent(Component):
|
|
|
135
140
|
preview_box = self._build_preview_box(preview, right_width, box_height)
|
|
136
141
|
|
|
137
142
|
left_rows = _write(content_lines, area.x, body_y, left_width)
|
|
138
|
-
right_rows = _write(
|
|
143
|
+
right_rows = _write(
|
|
144
|
+
preview_box, area.x + left_width + self.PREVIEW_GAP, body_y, right_width
|
|
145
|
+
)
|
|
139
146
|
col_rows = max(left_rows, right_rows)
|
|
140
147
|
|
|
141
148
|
# Footer spans the FULL width beneath both columns — it's not part of
|
|
@@ -180,23 +187,23 @@ class _AskUserComponent(Component):
|
|
|
180
187
|
for _ in range(self.ML_MIN_VISIBLE_ROWS - len(visible)):
|
|
181
188
|
inner.append("")
|
|
182
189
|
total = len(self._ml_lines)
|
|
190
|
+
muted = self._theme.muted.sgr()
|
|
183
191
|
if total > self.ML_VISIBLE_ROWS:
|
|
184
192
|
pct = int(self._ml_scroll_top / max(1, total - self.ML_VISIBLE_ROWS) * 100)
|
|
185
|
-
inner.append(f"
|
|
193
|
+
inner.append(f" {muted}↕ {pct}%{RESET}")
|
|
186
194
|
else:
|
|
187
195
|
inner.append("")
|
|
188
196
|
back = "Esc to cancel" if not self._options else "Esc to go back"
|
|
189
197
|
footer = [
|
|
190
198
|
"",
|
|
191
|
-
"
|
|
192
|
-
f"{back}\x1b[0m",
|
|
199
|
+
f" {muted}Enter to submit · \\+Enter or Shift+Enter for newline · {back}{RESET}",
|
|
193
200
|
]
|
|
194
201
|
return inner, footer
|
|
195
202
|
|
|
196
203
|
def _build_singleline_body(self) -> tuple[list[str], list[str]]:
|
|
197
204
|
back = "Esc to cancel" if not self._options else "Esc to go back"
|
|
198
205
|
content = [f" {self._freeform_value}█"]
|
|
199
|
-
footer = ["", f"
|
|
206
|
+
footer = ["", f" {self._theme.muted.sgr()}Enter to submit · {back}{RESET}"]
|
|
200
207
|
return content, footer
|
|
201
208
|
|
|
202
209
|
# Left margin + hanging indent for wrapped description lines beneath a
|
|
@@ -205,6 +212,13 @@ class _AskUserComponent(Component):
|
|
|
205
212
|
DESC_INDENT = " "
|
|
206
213
|
|
|
207
214
|
def _build_list_body(self, width: int) -> tuple[list[str], list[str]]:
|
|
215
|
+
t = self._theme
|
|
216
|
+
muted = t.muted.sgr()
|
|
217
|
+
success = t.success.sgr()
|
|
218
|
+
accent = t.accent.sgr()
|
|
219
|
+
emphasis = t.emphasis.sgr()
|
|
220
|
+
arrow = t.selector_arrow
|
|
221
|
+
|
|
208
222
|
inner: list[str] = []
|
|
209
223
|
desc_width = max(width - len(self.DESC_INDENT), 10)
|
|
210
224
|
|
|
@@ -213,51 +227,56 @@ class _AskUserComponent(Component):
|
|
|
213
227
|
title = FREEFORM_LABEL if is_freeform_row else self._options[i].title
|
|
214
228
|
desc = "" if is_freeform_row else (self._options[i].description or "")
|
|
215
229
|
is_cursor = i == self._cursor
|
|
216
|
-
|
|
230
|
+
|
|
231
|
+
# Settings-selector style: per-span colors, no reversed background.
|
|
232
|
+
# The moving cursor arrow is always accent-colored; the row label
|
|
233
|
+
# is emphasis (selected) or muted (normal). Any inline color used
|
|
234
|
+
# inside the row — e.g. the checkbox glyph — must resume title_sgr
|
|
235
|
+
# right after its own RESET, since ANSI styles don't nest.
|
|
236
|
+
title_sgr = emphasis if is_cursor else muted
|
|
237
|
+
cursor_mark = f"{accent}{arrow}{RESET}{title_sgr}" if is_cursor else " "
|
|
217
238
|
|
|
218
239
|
if is_freeform_row:
|
|
219
240
|
# Synthetic action row, not a countable option — keeps its own
|
|
220
|
-
#
|
|
221
|
-
|
|
241
|
+
# arrow marker instead of a number. Suppressed when this row
|
|
242
|
+
# is also the cursor row, since cursor_mark already shows an
|
|
243
|
+
# arrow there — otherwise it doubles up as "❯ ❯ Type…".
|
|
244
|
+
marker = f" {arrow} " if not is_cursor else " "
|
|
222
245
|
elif self._allow_multiple:
|
|
223
246
|
# Same tick glyphs as the /extensions config panel, paired with
|
|
224
|
-
# the option's ordinal number.
|
|
225
|
-
# reverse-video below, so leave them uncolored here — an
|
|
226
|
-
# embedded reset would cut the highlight short.
|
|
247
|
+
# the option's ordinal number.
|
|
227
248
|
if i in self._checked:
|
|
228
|
-
box = "✔"
|
|
249
|
+
box = f"{success}✔{RESET}{title_sgr}"
|
|
229
250
|
else:
|
|
230
|
-
box = "✖"
|
|
251
|
+
box = f"{muted}✖{RESET}{title_sgr}"
|
|
231
252
|
marker = f"{i + 1}. {box}"
|
|
232
253
|
else:
|
|
233
254
|
marker = f"{i + 1}."
|
|
234
255
|
|
|
235
256
|
row = f" {cursor_mark} {marker} {title}"
|
|
236
|
-
|
|
237
|
-
row = f"\x1b[7m{row}\x1b[0m"
|
|
257
|
+
row = f"{title_sgr}{row}{RESET}"
|
|
238
258
|
inner.append(row)
|
|
239
259
|
|
|
240
260
|
# Description on its own hanging-indented line(s) below the title,
|
|
241
261
|
# not packed onto the title row — at left-column widths that
|
|
242
262
|
# would run straight into the next option's row.
|
|
243
263
|
for line in textwrap.wrap(desc, desc_width) if desc else []:
|
|
244
|
-
inner.append(f"{self.DESC_INDENT}
|
|
264
|
+
inner.append(f"{self.DESC_INDENT}{muted}{line}{RESET}")
|
|
245
265
|
|
|
246
266
|
hints = ["↑/↓ move", "Enter confirm", "Esc cancel"]
|
|
247
267
|
if self._allow_multiple:
|
|
248
268
|
hints.insert(1, "Space toggle")
|
|
249
|
-
footer = ["", "
|
|
269
|
+
footer = ["", f" {muted}" + " · ".join(hints) + RESET]
|
|
250
270
|
return inner, footer
|
|
251
271
|
|
|
252
|
-
|
|
253
|
-
def _build_preview_box(preview: str | None, width: int, height: int) -> list[str]:
|
|
272
|
+
def _build_preview_box(self, preview: str | None, width: int, height: int) -> list[str]:
|
|
254
273
|
"""A bordered box of exactly ``height`` lines, sized to ``width``.
|
|
255
274
|
|
|
256
275
|
Content beyond the available rows is truncated with a "N lines hidden"
|
|
257
276
|
footer rather than growing the box — the box height is pinned to the
|
|
258
277
|
paired option list so the two columns stay aligned row-for-row.
|
|
259
278
|
"""
|
|
260
|
-
dim, reset =
|
|
279
|
+
dim, reset = self._theme.border.sgr(), RESET
|
|
261
280
|
inner_width = max(width - 4, 4)
|
|
262
281
|
top = f"{dim}┌{'─' * (width - 2)}┐{reset}"
|
|
263
282
|
bottom = f"{dim}└{'─' * (width - 2)}┘{reset}"
|
|
@@ -467,5 +486,5 @@ class _AskUserComponent(Component):
|
|
|
467
486
|
def invalidate(self) -> None:
|
|
468
487
|
pass
|
|
469
488
|
|
|
470
|
-
def set_theme(self, theme:
|
|
471
|
-
|
|
489
|
+
def set_theme(self, theme: LayoutTheme) -> None:
|
|
490
|
+
self._theme = theme
|
|
@@ -50,7 +50,7 @@ class AskUserTool(Tool):
|
|
|
50
50
|
"assumptions that would materially change the implementation. Each "
|
|
51
51
|
"question supports single-select, multi-select, and freeform text "
|
|
52
52
|
"answers, and up to 4 options when options are given. If you recommend a "
|
|
53
|
-
|
|
53
|
+
'specific option, list it first and append "(Recommended)" to its '
|
|
54
54
|
"title. Only available in an interactive TUI session."
|
|
55
55
|
),
|
|
56
56
|
schema=AskUserParams,
|
|
@@ -112,9 +112,7 @@ class AskUserTool(Tool):
|
|
|
112
112
|
else:
|
|
113
113
|
content = ", ".join(response["selections"])
|
|
114
114
|
|
|
115
|
-
answers.append(
|
|
116
|
-
{"question": question.question, "response": content, "raw": response}
|
|
117
|
-
)
|
|
115
|
+
answers.append({"question": question.question, "response": content, "raw": response})
|
|
118
116
|
|
|
119
117
|
return ToolResult.ok(
|
|
120
118
|
invocation.id,
|
|
@@ -149,6 +147,7 @@ class AskUserTool(Tool):
|
|
|
149
147
|
allow_freeform=question.allow_freeform,
|
|
150
148
|
multiline=question.multiline,
|
|
151
149
|
on_done=lambda v: (_on_done(v), done(v)),
|
|
150
|
+
theme=_theme,
|
|
152
151
|
)
|
|
153
152
|
if timeout:
|
|
154
153
|
timeout_ms = timeout
|
{tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/extensions/footer/__init__.py
RENAMED
|
@@ -65,6 +65,22 @@ def register(tau: ExtensionAPI) -> None:
|
|
|
65
65
|
model_badge.update_context_from_ctx(ctx)
|
|
66
66
|
_request_render(ctx)
|
|
67
67
|
|
|
68
|
+
@tau.on("message_update")
|
|
69
|
+
def on_message_update(event: Any, ctx: Any) -> None:
|
|
70
|
+
if not ctx.has_ui:
|
|
71
|
+
return
|
|
72
|
+
from tau.message.types import TextContent, ThinkingContent
|
|
73
|
+
|
|
74
|
+
msg = getattr(event, "message", None)
|
|
75
|
+
if msg is None:
|
|
76
|
+
return
|
|
77
|
+
contents = getattr(msg, "contents", [])
|
|
78
|
+
char_count = sum(
|
|
79
|
+
len(item.content) for item in contents if isinstance(item, (TextContent, ThinkingContent))
|
|
80
|
+
)
|
|
81
|
+
model_badge.set_live_estimate(char_count // 4)
|
|
82
|
+
_request_render(ctx)
|
|
83
|
+
|
|
68
84
|
@tau.on("thinking_level_select")
|
|
69
85
|
def on_thinking_level_select(event: Any, ctx: Any) -> None:
|
|
70
86
|
if not ctx.has_ui:
|
|
@@ -27,6 +27,10 @@ class ModelBadge(Component):
|
|
|
27
27
|
self._context_window = 0
|
|
28
28
|
self._thinking = False
|
|
29
29
|
self._thinking_level = ""
|
|
30
|
+
# Char-based estimate of the still-streaming message's token count,
|
|
31
|
+
# added on top of _tokens so the percentage climbs live; cleared
|
|
32
|
+
# whenever a new authoritative count lands via set_context.
|
|
33
|
+
self._live_estimate = 0
|
|
30
34
|
|
|
31
35
|
def set_model(self, model_id: str, provider: str, thinking: bool = False) -> None:
|
|
32
36
|
self._model = model_id
|
|
@@ -39,6 +43,15 @@ class ModelBadge(Component):
|
|
|
39
43
|
def set_context(self, tokens: int, context_window: int) -> None:
|
|
40
44
|
self._tokens = tokens
|
|
41
45
|
self._context_window = context_window
|
|
46
|
+
self._live_estimate = 0
|
|
47
|
+
|
|
48
|
+
def set_live_estimate(self, extra_tokens: int) -> None:
|
|
49
|
+
"""Add an in-flight token estimate on top of the last known count.
|
|
50
|
+
|
|
51
|
+
Call this on each streamed delta of the current turn's response;
|
|
52
|
+
superseded by :meth:`set_context` once the real usage arrives.
|
|
53
|
+
"""
|
|
54
|
+
self._live_estimate = extra_tokens
|
|
42
55
|
|
|
43
56
|
def update_from_ctx(self, ctx: object) -> None:
|
|
44
57
|
self.set_model(
|
|
@@ -89,8 +102,9 @@ class ModelBadge(Component):
|
|
|
89
102
|
left = f"({self._provider}) {self._model}" if self._provider else self._model
|
|
90
103
|
if self._thinking and self._thinking_level and self._thinking_level != "off":
|
|
91
104
|
left += f" ∙ {self._thinking_level.title()}"
|
|
92
|
-
|
|
93
|
-
|
|
105
|
+
tokens = self._tokens + self._live_estimate
|
|
106
|
+
if self._context_window > 0 and tokens > 0:
|
|
107
|
+
pct = tokens / self._context_window * 100
|
|
94
108
|
label = f"{pct:.1f}%" if pct < 1 else f"{int(round(pct))}%"
|
|
95
109
|
return f"{left}|{label}"
|
|
96
110
|
return left
|
|
@@ -30,7 +30,11 @@ from typing import TYPE_CHECKING
|
|
|
30
30
|
sys.path.insert(0, str(Path(__file__).parent))
|
|
31
31
|
|
|
32
32
|
from dispatch import _emit, _update_status, run_ticker # type: ignore[import-not-found]
|
|
33
|
-
from duration import
|
|
33
|
+
from duration import ( # type: ignore[import-not-found]
|
|
34
|
+
format_duration,
|
|
35
|
+
parse_duration,
|
|
36
|
+
parse_loop_args,
|
|
37
|
+
)
|
|
34
38
|
from state import MAX_TASKS, LoopTask, SchedulerState # type: ignore[import-not-found]
|
|
35
39
|
|
|
36
40
|
if TYPE_CHECKING:
|
|
@@ -99,7 +103,11 @@ def register(tau: ExtensionAPI) -> None:
|
|
|
99
103
|
return
|
|
100
104
|
|
|
101
105
|
task = state.add(parsed["prompt"], parsed["interval_s"])
|
|
102
|
-
_emit(
|
|
106
|
+
_emit(
|
|
107
|
+
ctx,
|
|
108
|
+
f"Loop scheduled every {format_duration(parsed['interval_s'])} "
|
|
109
|
+
f"(id: {task.id}). Expires in 3 days.",
|
|
110
|
+
)
|
|
103
111
|
if parsed.get("note"):
|
|
104
112
|
_emit(ctx, parsed["note"])
|
|
105
113
|
_update_status(ctx, state)
|
|
@@ -117,7 +125,9 @@ def register(tau: ExtensionAPI) -> None:
|
|
|
117
125
|
"Delete",
|
|
118
126
|
"Back",
|
|
119
127
|
]
|
|
120
|
-
choice = await ui.select(
|
|
128
|
+
choice = await ui.select(
|
|
129
|
+
f"Loop {task.id} — every {format_duration(task.interval_s)}", actions
|
|
130
|
+
)
|
|
121
131
|
if choice is None or choice == "Back":
|
|
122
132
|
return
|
|
123
133
|
|
|
@@ -158,7 +168,9 @@ def register(tau: ExtensionAPI) -> None:
|
|
|
158
168
|
|
|
159
169
|
async def _show_picker(ctx: ExtensionContext, ui: UIContext) -> None:
|
|
160
170
|
while True:
|
|
161
|
-
options = [
|
|
171
|
+
options = [
|
|
172
|
+
_loop_label(t) for t in sorted(state.tasks.values(), key=lambda t: t.next_run_at)
|
|
173
|
+
]
|
|
162
174
|
options.append("+ New loop")
|
|
163
175
|
if state.tasks:
|
|
164
176
|
options.append("Clear all loops")
|
|
@@ -174,7 +186,9 @@ def register(tau: ExtensionAPI) -> None:
|
|
|
174
186
|
continue
|
|
175
187
|
|
|
176
188
|
if choice == "Clear all loops":
|
|
177
|
-
ok = await ui.confirm(
|
|
189
|
+
ok = await ui.confirm(
|
|
190
|
+
"Clear all loops?", f"This deletes all {len(state.tasks)} loop(s)."
|
|
191
|
+
)
|
|
178
192
|
if ok:
|
|
179
193
|
n = state.clear()
|
|
180
194
|
ui.notify(f"Cleared {n} loop{'s' if n != 1 else ''}.")
|
|
@@ -199,7 +213,8 @@ def register(tau: ExtensionAPI) -> None:
|
|
|
199
213
|
|
|
200
214
|
tau.register_command(
|
|
201
215
|
"loop",
|
|
202
|
-
"Manage recurring prompts: /loop opens the loop manager,
|
|
216
|
+
"Manage recurring prompts: /loop opens the loop manager, "
|
|
217
|
+
"/loop <period> <task> creates one directly",
|
|
203
218
|
cmd_loop,
|
|
204
219
|
argument_hint="<period> <task>",
|
|
205
220
|
get_argument_completions=_get_argument_completions,
|
|
@@ -4,7 +4,6 @@ from __future__ import annotations
|
|
|
4
4
|
|
|
5
5
|
import math
|
|
6
6
|
import re
|
|
7
|
-
from typing import Optional
|
|
8
7
|
|
|
9
8
|
ONE_MINUTE = 60
|
|
10
9
|
FIFTEEN_MINUTES = 15 * ONE_MINUTE
|
|
@@ -17,7 +16,7 @@ _DURATION_WORD = re.compile(
|
|
|
17
16
|
)
|
|
18
17
|
|
|
19
18
|
|
|
20
|
-
def parse_duration(text: str) ->
|
|
19
|
+
def parse_duration(text: str) -> float | None:
|
|
21
20
|
"""Parse '5m', '2h', '30 seconds', etc. into seconds."""
|
|
22
21
|
raw = text.strip().lower()
|
|
23
22
|
if not raw:
|
|
@@ -43,7 +42,7 @@ def parse_duration(text: str) -> Optional[float]:
|
|
|
43
42
|
return None
|
|
44
43
|
|
|
45
44
|
|
|
46
|
-
def normalize_duration(seconds: float) -> tuple[float,
|
|
45
|
+
def normalize_duration(seconds: float) -> tuple[float, str | None]:
|
|
47
46
|
"""Round up to minute granularity, matching the minimum tick resolution."""
|
|
48
47
|
if seconds <= 0:
|
|
49
48
|
return ONE_MINUTE, "Rounded up to 1m (minimum interval)."
|
|
@@ -61,7 +60,7 @@ def format_duration(seconds: float) -> str:
|
|
|
61
60
|
return f"{int(seconds // ONE_MINUTE)}m"
|
|
62
61
|
|
|
63
62
|
|
|
64
|
-
def _extract_leading_duration(text: str) ->
|
|
63
|
+
def _extract_leading_duration(text: str) -> tuple[float, str] | None:
|
|
65
64
|
tokens = text.strip().split()
|
|
66
65
|
if len(tokens) < 2:
|
|
67
66
|
return None
|
|
@@ -78,7 +77,7 @@ def _extract_leading_duration(text: str) -> Optional[tuple[float, str]]:
|
|
|
78
77
|
return None
|
|
79
78
|
|
|
80
79
|
|
|
81
|
-
def _extract_trailing_duration(text: str) ->
|
|
80
|
+
def _extract_trailing_duration(text: str) -> tuple[float, str] | None:
|
|
82
81
|
tokens = text.strip().split()
|
|
83
82
|
if len(tokens) < 2:
|
|
84
83
|
return None
|
|
@@ -95,8 +94,8 @@ def _extract_trailing_duration(text: str) -> Optional[tuple[float, str]]:
|
|
|
95
94
|
return None
|
|
96
95
|
|
|
97
96
|
|
|
98
|
-
def parse_loop_args(text: str) ->
|
|
99
|
-
"""/loop 5m <task>
|
|
97
|
+
def parse_loop_args(text: str) -> dict | None:
|
|
98
|
+
"""/loop 5m <task> | /loop <task> every 2h | /loop <task> 5m | /loop <task> (default 10m)."""
|
|
100
99
|
raw = text.strip()
|
|
101
100
|
if not raw:
|
|
102
101
|
return None
|
|
@@ -8,9 +8,13 @@ import string
|
|
|
8
8
|
import time
|
|
9
9
|
from dataclasses import asdict, dataclass
|
|
10
10
|
from pathlib import Path
|
|
11
|
-
from typing import Optional
|
|
12
11
|
|
|
13
|
-
from duration import
|
|
12
|
+
from duration import ( # type: ignore[import-not-found]
|
|
13
|
+
FIFTEEN_MINUTES,
|
|
14
|
+
ONE_MINUTE,
|
|
15
|
+
THREE_DAYS,
|
|
16
|
+
format_duration,
|
|
17
|
+
)
|
|
14
18
|
|
|
15
19
|
MAX_TASKS = 50
|
|
16
20
|
|
|
@@ -23,10 +27,10 @@ class LoopTask:
|
|
|
23
27
|
created_at: float
|
|
24
28
|
next_run_at: float
|
|
25
29
|
interval_s: float
|
|
26
|
-
expires_at:
|
|
30
|
+
expires_at: float | None = None
|
|
27
31
|
jitter_s: float = 0
|
|
28
|
-
last_run_at:
|
|
29
|
-
last_status:
|
|
32
|
+
last_run_at: float | None = None
|
|
33
|
+
last_status: str | None = None
|
|
30
34
|
run_count: int = 0
|
|
31
35
|
pending: bool = False
|
|
32
36
|
|
|
@@ -56,7 +60,7 @@ def _hash_id(task_id: str) -> int:
|
|
|
56
60
|
class SchedulerState:
|
|
57
61
|
def __init__(self) -> None:
|
|
58
62
|
self.tasks: dict[str, LoopTask] = {}
|
|
59
|
-
self.storage_path:
|
|
63
|
+
self.storage_path: Path | None = None
|
|
60
64
|
self.dispatching = False
|
|
61
65
|
|
|
62
66
|
def set_storage(self, cwd: Path) -> None:
|
|
@@ -76,7 +80,9 @@ class SchedulerState:
|
|
|
76
80
|
if not item.get("id") or not item.get("prompt"):
|
|
77
81
|
continue
|
|
78
82
|
item = {**item, "pending": False}
|
|
79
|
-
task = LoopTask(
|
|
83
|
+
task = LoopTask(
|
|
84
|
+
**{k: v for k, v in item.items() if k in LoopTask.__dataclass_fields__}
|
|
85
|
+
)
|
|
80
86
|
if task.expires_at and now >= task.expires_at:
|
|
81
87
|
continue
|
|
82
88
|
self.tasks[task.id] = task
|
|
@@ -90,7 +96,9 @@ class SchedulerState:
|
|
|
90
96
|
self.storage_path.parent.mkdir(parents=True, exist_ok=True)
|
|
91
97
|
data = {
|
|
92
98
|
"version": 1,
|
|
93
|
-
"tasks": [
|
|
99
|
+
"tasks": [
|
|
100
|
+
asdict(t) for t in sorted(self.tasks.values(), key=lambda t: t.next_run_at)
|
|
101
|
+
],
|
|
94
102
|
}
|
|
95
103
|
tmp = self.storage_path.with_suffix(".json.tmp")
|
|
96
104
|
tmp.write_text(json.dumps(data, indent=2))
|
|
@@ -18,9 +18,7 @@ class TaskItem(BaseModel):
|
|
|
18
18
|
agent: str = Field(..., description="Name of the agent to invoke.")
|
|
19
19
|
task: str = Field(..., description="Task to delegate to the agent.")
|
|
20
20
|
cwd: str | None = Field(default=None, description="Working directory for the agent process.")
|
|
21
|
-
context: Literal["fresh", "fork"] | None = Field(
|
|
22
|
-
default=None, description=_CONTEXT_DESCRIPTION
|
|
23
|
-
)
|
|
21
|
+
context: Literal["fresh", "fork"] | None = Field(default=None, description=_CONTEXT_DESCRIPTION)
|
|
24
22
|
|
|
25
23
|
|
|
26
24
|
class ChainItem(BaseModel):
|
|
@@ -30,9 +28,7 @@ class ChainItem(BaseModel):
|
|
|
30
28
|
description="Task with an optional '{previous}' placeholder for the prior step's output.",
|
|
31
29
|
)
|
|
32
30
|
cwd: str | None = Field(default=None, description="Working directory for the agent process.")
|
|
33
|
-
context: Literal["fresh", "fork"] | None = Field(
|
|
34
|
-
default=None, description=_CONTEXT_DESCRIPTION
|
|
35
|
-
)
|
|
31
|
+
context: Literal["fresh", "fork"] | None = Field(default=None, description=_CONTEXT_DESCRIPTION)
|
|
36
32
|
|
|
37
33
|
|
|
38
34
|
class SubagentParams(BaseModel):
|
|
@@ -47,9 +43,7 @@ class SubagentParams(BaseModel):
|
|
|
47
43
|
"need to set it explicitly."
|
|
48
44
|
),
|
|
49
45
|
)
|
|
50
|
-
agent: str | None = Field(
|
|
51
|
-
default=None, description="Target agent name for action='get'."
|
|
52
|
-
)
|
|
46
|
+
agent: str | None = Field(default=None, description="Target agent name for action='get'.")
|
|
53
47
|
spawn: list[TaskItem] | None = Field(
|
|
54
48
|
default=None,
|
|
55
49
|
description=(
|
|
@@ -59,6 +59,7 @@ class TodoBoard:
|
|
|
59
59
|
self._shown = False
|
|
60
60
|
|
|
61
61
|
def _lines(self, theme: Any) -> list[str]:
|
|
62
|
+
from tau.modes.interactive.components.message_list import apply_render_shell
|
|
62
63
|
from tau.tui.style import apply_style
|
|
63
64
|
|
|
64
65
|
glyphs = {
|
|
@@ -67,16 +68,14 @@ class TodoBoard:
|
|
|
67
68
|
"done": ("✓", theme.success),
|
|
68
69
|
"failed": ("✗", theme.error),
|
|
69
70
|
}
|
|
70
|
-
|
|
71
|
-
header = (
|
|
72
|
-
f"{apply_style(theme.warning, '☐')} "
|
|
73
|
-
f"{apply_style(theme.emphasis, f'Todos ({len(remaining)} pending)')}"
|
|
74
|
-
)
|
|
75
|
-
lines = [header]
|
|
71
|
+
items = []
|
|
76
72
|
for item in self._state.items:
|
|
77
73
|
glyph, style = glyphs[item.status]
|
|
78
|
-
|
|
79
|
-
|
|
74
|
+
subject = item.subject
|
|
75
|
+
if item.status == "done":
|
|
76
|
+
subject = apply_style(style.patch(theme.strikethrough), subject)
|
|
77
|
+
items.append(f"{apply_style(style, glyph)} {item.id}. {subject}")
|
|
78
|
+
return apply_render_shell(items, theme)
|
|
80
79
|
|
|
81
80
|
def sync(self, ctx: ExtensionContext) -> None:
|
|
82
81
|
ui = ctx.ui
|
|
@@ -148,7 +147,9 @@ def register(tau: ExtensionAPI) -> None:
|
|
|
148
147
|
("Done", "✓", state.list("done")),
|
|
149
148
|
("Failed", "✗", state.list("failed")),
|
|
150
149
|
]
|
|
151
|
-
header = " · ".join(
|
|
150
|
+
header = " · ".join(
|
|
151
|
+
f"{len(items)} {label.lower()}" for label, _, items in sections if items
|
|
152
|
+
)
|
|
152
153
|
lines = [header]
|
|
153
154
|
for label, glyph, items in sections:
|
|
154
155
|
if not items:
|
{tau_coding_agent-0.7.2 → tau_coding_agent-0.7.3}/tau/builtins/extensions/todo/todo_schema.py
RENAMED
|
@@ -54,7 +54,9 @@ class TodoParams(BaseModel):
|
|
|
54
54
|
)
|
|
55
55
|
append_note: str | None = Field(
|
|
56
56
|
default=None,
|
|
57
|
-
description=
|
|
57
|
+
description=(
|
|
58
|
+
"Append a paragraph to the task's existing description. Only used by action='update'."
|
|
59
|
+
),
|
|
58
60
|
)
|
|
59
61
|
status: Literal["pending", "in_progress", "done", "failed"] | None = Field(
|
|
60
62
|
default=None,
|