tau-coding-agent 0.3.1__tar.gz → 0.3.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.3.1/tau_coding_agent.egg-info → tau_coding_agent-0.3.9}/PKG-INFO +3 -1
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/docs/auth.md +1 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/docs/extensions.md +5 -27
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/docs/inference-providers.md +42 -1
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/docs/settings.md +13 -5
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/docs/usage.md +2 -2
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/pyproject.toml +15 -1
- tau_coding_agent-0.3.9/tau/agent/__init__.py +11 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/agent/prompt/__init__.py +4 -4
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/agent/prompt/builder.py +118 -17
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/agent/prompt/types.py +4 -1
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/agent/service.py +211 -97
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/agent/types.py +11 -9
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/auth/manager.py +59 -22
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/auth/storage.py +20 -8
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/auth/types.py +11 -6
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/builtins/commands/__init__.py +4 -4
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/builtins/commands/clear.py +1 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/builtins/commands/compact.py +2 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/builtins/commands/reload.py +1 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/builtins/extensions/footer/__init__.py +17 -11
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/builtins/extensions/footer/git.py +2 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/builtins/extensions/footer/model.py +2 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/builtins/extensions/footer/utils.py +6 -5
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/builtins/extensions/header/__init__.py +8 -2
- tau_coding_agent-0.3.9/tau/builtins/models/audio.py +260 -0
- tau_coding_agent-0.3.9/tau/builtins/models/image.py +228 -0
- tau_coding_agent-0.3.9/tau/builtins/models/text.py +6817 -0
- tau_coding_agent-0.3.9/tau/builtins/models/video.py +239 -0
- tau_coding_agent-0.3.9/tau/builtins/providers/audio.py +10 -0
- tau_coding_agent-0.3.9/tau/builtins/providers/image.py +15 -0
- tau_coding_agent-0.3.9/tau/builtins/providers/text.py +130 -0
- tau_coding_agent-0.3.9/tau/builtins/providers/video.py +8 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/builtins/tools/edit.py +69 -28
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/builtins/tools/glob.py +53 -16
- tau_coding_agent-0.3.9/tau/builtins/tools/grep.py +209 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/builtins/tools/ls.py +31 -15
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/builtins/tools/read.py +42 -15
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/builtins/tools/terminal.py +37 -15
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/builtins/tools/write.py +31 -14
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/commands/__init__.py +4 -4
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/commands/registry.py +2 -1
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/commands/types.py +7 -4
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/console/cli.py +104 -42
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/console/commands/auth.py +28 -6
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/console/commands/packages.py +15 -11
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/console/commands/update.py +5 -5
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/core/registry.py +5 -4
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/engine/__init__.py +17 -13
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/engine/service.py +209 -108
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/engine/types.py +62 -36
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/extensions/__init__.py +7 -4
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/extensions/api.py +79 -54
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/extensions/context.py +33 -9
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/extensions/loader.py +47 -30
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/extensions/runtime.py +52 -24
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/extensions/settings.py +5 -8
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/hooks/__init__.py +117 -81
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/hooks/engine.py +98 -44
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/hooks/inference.py +4 -2
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/hooks/runtime.py +36 -16
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/hooks/service.py +10 -9
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/hooks/session.py +45 -28
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/hooks/tui.py +14 -8
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/hooks/types.py +49 -17
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/__init__.py +43 -33
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/audio/builtins.py +3 -3
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/audio/elevenlabs_audio.py +6 -9
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/audio/gemini_audio.py +6 -4
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/audio/openai_audio.py +3 -6
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/audio/registry.py +3 -1
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/audio/sarvam_audio.py +1 -2
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/audio/service.py +56 -18
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/audio/utils.py +16 -15
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/image/base.py +1 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/image/builtins.py +2 -2
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/image/gemini_image.py +5 -5
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/image/openai_image.py +8 -4
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/image/openrouter.py +17 -8
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/image/registry.py +3 -1
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/image/service.py +25 -10
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/registry.py +7 -6
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/text/anthropic_claude_code.py +95 -41
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/text/anthropic_messages.py +98 -40
- tau_coding_agent-0.3.9/tau/inference/api/text/anthropic_vertex.py +269 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/text/base.py +5 -4
- tau_coding_agent-0.3.9/tau/inference/api/text/builtins.py +28 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/text/gemini_generate.py +120 -56
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/text/github_copilot_chat.py +63 -27
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/text/google_antigravity.py +234 -143
- tau_coding_agent-0.3.9/tau/inference/api/text/google_vertex.py +366 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/text/mistral_chat.py +125 -59
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/text/ollama_chat.py +92 -32
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/text/openai_codex_responses.py +105 -55
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/text/openai_completions.py +79 -30
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/text/openai_responses.py +158 -60
- tau_coding_agent-0.3.9/tau/inference/api/text/openai_vertex.py +309 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/text/registry.py +7 -5
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/text/service.py +202 -69
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/text/utils.py +103 -34
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/video/base.py +0 -1
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/video/fal_video.py +16 -3
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/video/openrouter_video.py +16 -3
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/video/registry.py +2 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/video/service.py +28 -13
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/model/registry.py +8 -2
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/model/types.py +30 -8
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/provider/oauth/__init__.py +18 -4
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/provider/oauth/anthropic_claude_code.py +85 -42
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/provider/oauth/github_copilot.py +67 -36
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/provider/oauth/google_antigravity.py +85 -46
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/provider/oauth/openai_codex.py +80 -42
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/provider/oauth/types.py +7 -7
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/provider/oauth/utils.py +25 -14
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/provider/registry.py +19 -10
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/provider/types.py +31 -18
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/types.py +128 -94
- tau_coding_agent-0.3.9/tau/inference/utils.py +399 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/message/types.py +67 -32
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/message/utils.py +16 -10
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/packages/__init__.py +2 -2
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/packages/manager.py +20 -15
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/packages/types.py +4 -5
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/packages/utils.py +19 -3
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/prompts/expand.py +5 -1
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/prompts/loader.py +1 -1
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/prompts/registry.py +4 -1
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/rpc/mode.py +174 -76
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/rpc/types.py +42 -1
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/runtime/service.py +54 -34
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/runtime/types.py +50 -37
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/session/branch_summarization.py +23 -10
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/session/compaction.py +134 -49
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/session/manager.py +103 -44
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/session/types.py +12 -17
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/session/utils.py +98 -25
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/settings/manager.py +186 -104
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/settings/paths.py +22 -1
- tau_coding_agent-0.3.9/tau/settings/storage.py +68 -0
- tau_coding_agent-0.3.9/tau/settings/types.py +192 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/settings/utils.py +3 -1
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/skills/loader.py +4 -2
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/skills/registry.py +11 -5
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/themes/loader.py +155 -86
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/themes/registry.py +10 -10
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/themes/types.py +2 -2
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tool/registry.py +1 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tool/types.py +29 -20
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/trust/__init__.py +2 -2
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/trust/manager.py +11 -3
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/trust/types.py +1 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/trust/utils.py +8 -6
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/__init__.py +10 -10
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/agent_hooks.py +41 -26
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/ansi.py +106 -40
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/app.py +151 -67
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/autocomplete.py +7 -4
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/capabilities.py +7 -2
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/commands/appearance.py +58 -32
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/commands/auth.py +73 -38
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/commands/context.py +9 -6
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/commands/misc.py +9 -3
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/commands/model.py +15 -4
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/commands/session.py +83 -36
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/component.py +13 -23
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/components/autocomplete_manager.py +19 -12
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/components/autocomplete_picker.py +17 -12
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/components/box.py +9 -8
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/components/command_palette.py +18 -12
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/components/dynamic_border.py +1 -1
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/components/file_picker.py +32 -26
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/components/image.py +18 -6
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/components/inline_selector.py +6 -4
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/components/layout.py +99 -47
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/components/message_list.py +129 -91
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/components/modal.py +8 -8
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/components/model_palette.py +29 -12
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/components/picker_overlay.py +6 -2
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/components/prompt_overlay.py +8 -6
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/components/resume_modal.py +30 -27
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/components/select_list.py +29 -23
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/components/settings_modal.py +14 -9
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/components/settings_schema.py +45 -25
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/components/spinner.py +18 -10
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/components/text_input.py +80 -41
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/components/text_prompt.py +2 -1
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/components/tree_select_list.py +54 -35
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/components/trust_screen.py +14 -9
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/diff.py +7 -7
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/input.py +230 -90
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/input_handler.py +98 -44
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/keybindings.py +20 -20
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/markdown.py +65 -24
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/message_renderers.py +4 -3
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/overlay.py +27 -20
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/renderer.py +46 -34
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/terminal.py +36 -14
- tau_coding_agent-0.3.9/tau/tui/theme.py +171 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/tui.py +33 -10
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/ui_context.py +38 -24
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/utils/http_proxy.py +13 -12
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/utils/image_processing.py +15 -15
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/utils/secrets.py +14 -3
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/utils/version_check.py +3 -3
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9/tau_coding_agent.egg-info}/PKG-INFO +3 -1
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau_coding_agent.egg-info/SOURCES.txt +59 -41
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau_coding_agent.egg-info/requires.txt +3 -0
- tau_coding_agent-0.3.9/tests/test_agent_prompt.py +287 -0
- tau_coding_agent-0.3.9/tests/test_agent_types.py +92 -0
- tau_coding_agent-0.3.9/tests/test_ansi.py +381 -0
- tau_coding_agent-0.3.9/tests/test_auth_manager.py +173 -0
- tau_coding_agent-0.3.9/tests/test_auth_storage.py +106 -0
- tau_coding_agent-0.3.9/tests/test_branch_summarization.py +125 -0
- tau_coding_agent-0.3.9/tests/test_builtin_tools.py +376 -0
- tau_coding_agent-0.3.9/tests/test_command_registry.py +167 -0
- tau_coding_agent-0.3.9/tests/test_compaction.py +433 -0
- tau_coding_agent-0.3.9/tests/test_diff.py +134 -0
- tau_coding_agent-0.3.9/tests/test_engine_types.py +110 -0
- tau_coding_agent-0.3.9/tests/test_footer_utils.py +69 -0
- tau_coding_agent-0.3.9/tests/test_fuzzy.py +98 -0
- tau_coding_agent-0.3.9/tests/test_http_proxy.py +168 -0
- tau_coding_agent-0.3.9/tests/test_image_processing.py +196 -0
- tau_coding_agent-0.3.9/tests/test_inference_api_text_utils.py +127 -0
- tau_coding_agent-0.3.9/tests/test_inference_error_utils.py +197 -0
- tau_coding_agent-0.3.9/tests/test_inference_types.py +81 -0
- tau_coding_agent-0.3.9/tests/test_inference_utils.py +192 -0
- tau_coding_agent-0.3.9/tests/test_keybindings.py +137 -0
- tau_coding_agent-0.3.9/tests/test_markdown.py +241 -0
- tau_coding_agent-0.3.9/tests/test_message_types.py +301 -0
- tau_coding_agent-0.3.9/tests/test_message_utils.py +206 -0
- tau_coding_agent-0.3.9/tests/test_model_registry.py +137 -0
- tau_coding_agent-0.3.9/tests/test_model_types.py +110 -0
- tau_coding_agent-0.3.9/tests/test_oauth_utils.py +88 -0
- tau_coding_agent-0.3.9/tests/test_packages_utils.py +162 -0
- tau_coding_agent-0.3.9/tests/test_pkce.py +45 -0
- tau_coding_agent-0.3.9/tests/test_prompts_expand.py +69 -0
- tau_coding_agent-0.3.9/tests/test_prompts_loader.py +133 -0
- tau_coding_agent-0.3.9/tests/test_prompts_registry.py +84 -0
- tau_coding_agent-0.3.9/tests/test_provider_registry.py +135 -0
- tau_coding_agent-0.3.9/tests/test_rpc_mode.py +329 -0
- tau_coding_agent-0.3.9/tests/test_secrets.py +82 -0
- tau_coding_agent-0.3.9/tests/test_session_trust_persist.py +154 -0
- tau_coding_agent-0.3.9/tests/test_session_types.py +219 -0
- tau_coding_agent-0.3.9/tests/test_session_utils.py +443 -0
- tau_coding_agent-0.3.9/tests/test_settings_manager.py +150 -0
- tau_coding_agent-0.3.9/tests/test_settings_paths.py +175 -0
- tau_coding_agent-0.3.9/tests/test_settings_storage.py +130 -0
- tau_coding_agent-0.3.9/tests/test_settings_utils.py +75 -0
- tau_coding_agent-0.3.9/tests/test_skills_loader.py +124 -0
- tau_coding_agent-0.3.9/tests/test_skills_registry.py +127 -0
- tau_coding_agent-0.3.9/tests/test_text_llm_invoke.py +308 -0
- tau_coding_agent-0.3.9/tests/test_theme_loader.py +192 -0
- tau_coding_agent-0.3.9/tests/test_themes_registry.py +167 -0
- tau_coding_agent-0.3.9/tests/test_tool_registry.py +172 -0
- tau_coding_agent-0.3.9/tests/test_tool_render.py +91 -0
- tau_coding_agent-0.3.9/tests/test_trust_manager.py +121 -0
- tau_coding_agent-0.3.9/tests/test_trust_utils.py +124 -0
- tau_coding_agent-0.3.9/tests/test_tui_capabilities.py +165 -0
- tau_coding_agent-0.3.9/tests/test_tui_input.py +401 -0
- tau_coding_agent-0.3.9/tests/test_tui_theme.py +228 -0
- tau_coding_agent-0.3.9/tests/test_tui_utils.py +33 -0
- tau_coding_agent-0.3.9/tests/test_version_check.py +50 -0
- tau_coding_agent-0.3.1/tau/agent/__init__.py +0 -11
- tau_coding_agent-0.3.1/tau/builtins/__pycache__/__init__.cpython-313.pyc +0 -0
- tau_coding_agent-0.3.1/tau/builtins/__pycache__/__init__.cpython-314.pyc +0 -0
- tau_coding_agent-0.3.1/tau/builtins/commands/__pycache__/__init__.cpython-313.pyc +0 -0
- tau_coding_agent-0.3.1/tau/builtins/commands/__pycache__/__init__.cpython-314.pyc +0 -0
- tau_coding_agent-0.3.1/tau/builtins/commands/__pycache__/clear.cpython-313.pyc +0 -0
- tau_coding_agent-0.3.1/tau/builtins/commands/__pycache__/clear.cpython-314.pyc +0 -0
- tau_coding_agent-0.3.1/tau/builtins/commands/__pycache__/compact.cpython-313.pyc +0 -0
- tau_coding_agent-0.3.1/tau/builtins/commands/__pycache__/compact.cpython-314.pyc +0 -0
- tau_coding_agent-0.3.1/tau/builtins/commands/__pycache__/reload.cpython-313.pyc +0 -0
- tau_coding_agent-0.3.1/tau/builtins/commands/__pycache__/reload.cpython-314.pyc +0 -0
- tau_coding_agent-0.3.1/tau/builtins/commands/__pycache__/session.cpython-313.pyc +0 -0
- tau_coding_agent-0.3.1/tau/builtins/commands/__pycache__/session.cpython-314.pyc +0 -0
- tau_coding_agent-0.3.1/tau/builtins/extensions/footer/__pycache__/__init__.cpython-313.pyc +0 -0
- tau_coding_agent-0.3.1/tau/builtins/extensions/footer/__pycache__/git.cpython-313.pyc +0 -0
- tau_coding_agent-0.3.1/tau/builtins/extensions/footer/__pycache__/model.cpython-313.pyc +0 -0
- tau_coding_agent-0.3.1/tau/builtins/extensions/footer/__pycache__/utils.cpython-313.pyc +0 -0
- tau_coding_agent-0.3.1/tau/builtins/extensions/header/__pycache__/__init__.cpython-313.pyc +0 -0
- tau_coding_agent-0.3.1/tau/builtins/models/__pycache__/__init__.cpython-313.pyc +0 -0
- tau_coding_agent-0.3.1/tau/builtins/models/__pycache__/text.cpython-313.pyc +0 -0
- tau_coding_agent-0.3.1/tau/builtins/models/audio.py +0 -43
- tau_coding_agent-0.3.1/tau/builtins/models/image.py +0 -43
- tau_coding_agent-0.3.1/tau/builtins/models/text.py +0 -482
- tau_coding_agent-0.3.1/tau/builtins/models/video.py +0 -40
- tau_coding_agent-0.3.1/tau/builtins/providers/__pycache__/__init__.cpython-313.pyc +0 -0
- tau_coding_agent-0.3.1/tau/builtins/providers/__pycache__/text.cpython-313.pyc +0 -0
- tau_coding_agent-0.3.1/tau/builtins/providers/audio.py +0 -10
- tau_coding_agent-0.3.1/tau/builtins/providers/image.py +0 -9
- tau_coding_agent-0.3.1/tau/builtins/providers/text.py +0 -33
- tau_coding_agent-0.3.1/tau/builtins/providers/video.py +0 -6
- tau_coding_agent-0.3.1/tau/builtins/tools/__pycache__/__init__.cpython-313.pyc +0 -0
- tau_coding_agent-0.3.1/tau/builtins/tools/__pycache__/__init__.cpython-314.pyc +0 -0
- tau_coding_agent-0.3.1/tau/builtins/tools/__pycache__/bash.cpython-313.pyc +0 -0
- tau_coding_agent-0.3.1/tau/builtins/tools/__pycache__/bash.cpython-314.pyc +0 -0
- tau_coding_agent-0.3.1/tau/builtins/tools/__pycache__/edit.cpython-313.pyc +0 -0
- tau_coding_agent-0.3.1/tau/builtins/tools/__pycache__/edit.cpython-314.pyc +0 -0
- tau_coding_agent-0.3.1/tau/builtins/tools/__pycache__/glob.cpython-313.pyc +0 -0
- tau_coding_agent-0.3.1/tau/builtins/tools/__pycache__/glob.cpython-314.pyc +0 -0
- tau_coding_agent-0.3.1/tau/builtins/tools/__pycache__/grep.cpython-313.pyc +0 -0
- tau_coding_agent-0.3.1/tau/builtins/tools/__pycache__/grep.cpython-314.pyc +0 -0
- tau_coding_agent-0.3.1/tau/builtins/tools/__pycache__/ls.cpython-313.pyc +0 -0
- tau_coding_agent-0.3.1/tau/builtins/tools/__pycache__/ls.cpython-314.pyc +0 -0
- tau_coding_agent-0.3.1/tau/builtins/tools/__pycache__/read.cpython-313.pyc +0 -0
- tau_coding_agent-0.3.1/tau/builtins/tools/__pycache__/read.cpython-314.pyc +0 -0
- tau_coding_agent-0.3.1/tau/builtins/tools/__pycache__/terminal.cpython-313.pyc +0 -0
- tau_coding_agent-0.3.1/tau/builtins/tools/__pycache__/terminal.cpython-314.pyc +0 -0
- tau_coding_agent-0.3.1/tau/builtins/tools/__pycache__/write.cpython-313.pyc +0 -0
- tau_coding_agent-0.3.1/tau/builtins/tools/__pycache__/write.cpython-314.pyc +0 -0
- tau_coding_agent-0.3.1/tau/builtins/tools/grep.py +0 -146
- tau_coding_agent-0.3.1/tau/extensions/events.py +0 -70
- tau_coding_agent-0.3.1/tau/inference/api/text/builtins.py +0 -19
- tau_coding_agent-0.3.1/tau/inference/utils.py +0 -219
- tau_coding_agent-0.3.1/tau/settings/storage.py +0 -63
- tau_coding_agent-0.3.1/tau/settings/types.py +0 -173
- tau_coding_agent-0.3.1/tau/tui/theme.py +0 -151
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/LICENSE +0 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/MANIFEST.in +0 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/README.md +0 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/docs/IMPLEMENTATION_SUMMARY.md +0 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/docs/architecture.md +0 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/docs/cli-reference.md +0 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/docs/development.md +0 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/docs/docs.json +0 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/docs/extension-settings.md +0 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/docs/http-proxy.md +0 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/docs/index.md +0 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/docs/installation.md +0 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/docs/keybindings.md +0 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/docs/messages.md +0 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/docs/project-context.md +0 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/docs/project-structure.md +0 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/docs/prompts.md +0 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/docs/python-api.md +0 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/docs/quickstart.md +0 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/docs/sessions.md +0 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/docs/skills.md +0 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/docs/themes.md +0 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/docs/tools.md +0 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/setup.cfg +0 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/__init__.py +0 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/builtins/__init__.py +0 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/builtins/commands/session.py +0 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/builtins/models/__init__.py +0 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/builtins/prompts/commit.md +0 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/builtins/prompts/docs.md +0 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/builtins/prompts/explain.md +0 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/builtins/prompts/fix.md +0 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/builtins/prompts/refactor.md +0 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/builtins/prompts/review.md +0 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/builtins/prompts/test.md +0 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/builtins/providers/__init__.py +0 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/builtins/skills/code-review/SKILL.md +0 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/builtins/skills/debug/SKILL.md +0 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/builtins/skills/git-commit/SKILL.md +0 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/builtins/themes/dark.yaml +0 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/builtins/themes/light.yaml +0 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/builtins/tools/__init__.py +3 -3
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/console/__init__.py +0 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/console/commands/__init__.py +0 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/core/__init__.py +0 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/__init__.py +0 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/audio/__init__.py +0 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/audio/base.py +2 -2
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/image/__init__.py +0 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/text/__init__.py +0 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/text/types.py +0 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/video/__init__.py +0 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/video/builtins.py +0 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/model/__init__.py +0 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/provider/__init__.py +0 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/provider/oauth/pkce.py +0 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/message/__init__.py +0 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/prompts/types.py +0 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/rpc/__init__.py +1 -1
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/skills/types.py +0 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tool/__init__.py +0 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tool/render.py +0 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/commands/__init__.py +0 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/components/__init__.py +0 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/fuzzy.py +0 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/utils.py +0 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/utils/__init__.py +0 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau_coding_agent.egg-info/dependency_links.txt +0 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau_coding_agent.egg-info/entry_points.txt +0 -0
- {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau_coding_agent.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: tau-coding-agent
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.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
|
|
@@ -26,6 +26,8 @@ Requires-Dist: pygments==2.20.0
|
|
|
26
26
|
Requires-Dist: pathspec==1.1.1
|
|
27
27
|
Requires-Dist: gitpython==3.1.50
|
|
28
28
|
Requires-Dist: grapheme==0.6.0
|
|
29
|
+
Provides-Extra: tools
|
|
30
|
+
Requires-Dist: ripgrep>=14.0.0; extra == "tools"
|
|
29
31
|
Dynamic: license-file
|
|
30
32
|
|
|
31
33
|
# Tau (τ)
|
|
@@ -143,6 +143,7 @@ The provider ID used as the key in `auth.json` and the `{PROVIDER}_API_KEY` env
|
|
|
143
143
|
| OpenAI | `openai` | `OPENAI_API_KEY` |
|
|
144
144
|
| Google | `google` | `GOOGLE_API_KEY` |
|
|
145
145
|
| Mistral | `mistral` | `MISTRAL_API_KEY` |
|
|
146
|
+
| Fireworks AI | `fireworks` | `FIREWORKS_API_KEY` |
|
|
146
147
|
| Ollama | `ollama` | `OLLAMA_API_KEY` |
|
|
147
148
|
|
|
148
149
|
## Next Steps
|
|
@@ -30,9 +30,11 @@ A subdirectory under `extensions/` is loaded if it has either:
|
|
|
30
30
|
|
|
31
31
|
Before the entry file is executed, these specs are installed into the project or
|
|
32
32
|
global packages venv (`uv pip install`, falling back to `pip` when `uv` isn't on
|
|
33
|
-
PATH) and the venv's site-packages directory is
|
|
34
|
-
|
|
35
|
-
|
|
33
|
+
PATH) and the venv's site-packages directory is appended to `sys.path`. Tau's
|
|
34
|
+
runtime environment keeps precedence, so an extension cannot replace Tau's own
|
|
35
|
+
dependencies with incompatible versions. The install only runs once — a hash of
|
|
36
|
+
the dependency list is cached, so unchanged manifests are a no-op on subsequent
|
|
37
|
+
launches.
|
|
36
38
|
|
|
37
39
|
## Entry point
|
|
38
40
|
|
|
@@ -625,29 +627,6 @@ session working directory; pass an explicit `cwd=` to override.
|
|
|
625
627
|
|
|
626
628
|
---
|
|
627
629
|
|
|
628
|
-
## Cross-extension event bus
|
|
629
|
-
|
|
630
|
-
Extensions can communicate with each other via `tau.events`:
|
|
631
|
-
|
|
632
|
-
```python
|
|
633
|
-
# producer.py
|
|
634
|
-
def register(tau):
|
|
635
|
-
@tau.on("session_start")
|
|
636
|
-
async def on_start(event, ctx):
|
|
637
|
-
await tau.events.emit("producer:ready", {"version": "1.0"})
|
|
638
|
-
|
|
639
|
-
# consumer.py
|
|
640
|
-
def register(tau):
|
|
641
|
-
@tau.events.on("producer:ready")
|
|
642
|
-
async def on_ready(data):
|
|
643
|
-
print(f"producer ready — version {data['version']}")
|
|
644
|
-
```
|
|
645
|
-
|
|
646
|
-
This is separate from the hooks bus: `tau.events` is for extension-to-extension
|
|
647
|
-
messages; `tau.on(...)` is for system lifecycle events.
|
|
648
|
-
|
|
649
|
-
---
|
|
650
|
-
|
|
651
630
|
## Editor autocomplete providers
|
|
652
631
|
|
|
653
632
|
Extensions can inject custom autocomplete suggestions into the editor. When the user
|
|
@@ -740,7 +719,6 @@ def register(tau):
|
|
|
740
719
|
| `tau.register_flag(name, type, env, default)` | Declare an env-backed flag |
|
|
741
720
|
| `tau.get_flag(name)` | Read a registered flag's value |
|
|
742
721
|
| `await tau.exec(cmd, args, cwd)` | Run a shell command |
|
|
743
|
-
| `tau.events` | Cross-extension `EventBus` |
|
|
744
722
|
| `tau.config` | Per-extension settings dict from `settings.json` |
|
|
745
723
|
| `tau.cwd` | `Path` — working directory at session start |
|
|
746
724
|
| `tau.model_id` | Active model identifier |
|
|
@@ -12,6 +12,7 @@ Tau supports the following inference providers:
|
|
|
12
12
|
| OpenAI | API Key | No | [Link](#openai) |
|
|
13
13
|
| Google Gemini | API Key | Yes | [Link](#google-gemini) |
|
|
14
14
|
| Mistral AI | API Key | Limited | [Link](#mistral-ai) |
|
|
15
|
+
| Fireworks AI | API Key | No | [Link](#fireworks-ai) |
|
|
15
16
|
| Ollama | None | Yes | [Link](#ollama-local) |
|
|
16
17
|
| Azure OpenAI | API Key | No | [Link](#azure-openai) |
|
|
17
18
|
|
|
@@ -103,11 +104,51 @@ export MISTRAL_API_KEY=...
|
|
|
103
104
|
tau --model mistral/mistral-large -p "Say hello"
|
|
104
105
|
```
|
|
105
106
|
|
|
107
|
+
## Fireworks AI
|
|
108
|
+
|
|
109
|
+
Fireworks AI provides fast, cost-efficient inference for open-source models including Llama, DeepSeek, Qwen, and Mixtral — with OpenAI-compatible APIs.
|
|
110
|
+
|
|
111
|
+
**Text models**:
|
|
112
|
+
|
|
113
|
+
| Model | Context | Pricing (in/out per M tokens) |
|
|
114
|
+
|-------|---------|-------------------------------|
|
|
115
|
+
| `accounts/fireworks/models/llama-v3p3-70b-instruct` | 131K | $0.90 / $0.90 |
|
|
116
|
+
| `accounts/fireworks/models/llama-v3p1-405b-instruct` | 131K | $3.00 / $3.00 |
|
|
117
|
+
| `accounts/fireworks/models/deepseek-r1` *(thinking)* | 160K | $3.00 / $7.00 |
|
|
118
|
+
| `accounts/fireworks/models/deepseek-v3` | 131K | $0.90 / $0.90 |
|
|
119
|
+
| `accounts/fireworks/models/qwen3-235b-a22b` *(thinking)* | 131K | $0.22 / $0.88 |
|
|
120
|
+
| `accounts/fireworks/models/qwen3-30b-a3b` *(thinking)* | 131K | $0.15 / $0.60 |
|
|
121
|
+
| `accounts/fireworks/models/mixtral-8x22b-instruct` | 65K | $0.90 / $0.90 |
|
|
122
|
+
| `accounts/fireworks/models/gemma2-9b-it` | 8K | $0.20 / $0.20 |
|
|
123
|
+
|
|
124
|
+
**Image models**: Flux 1 Schnell FP8, Flux 1 Dev FP8
|
|
125
|
+
|
|
126
|
+
### Setup
|
|
127
|
+
|
|
128
|
+
1. Create an account at [Fireworks AI](https://fireworks.ai)
|
|
129
|
+
2. Generate an API key in your account settings
|
|
130
|
+
3. Set the environment variable:
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
export FIREWORKS_API_KEY=fw_...
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### Verify
|
|
137
|
+
|
|
138
|
+
```bash
|
|
139
|
+
tau --model fireworks/accounts/fireworks/models/llama-v3p3-70b-instruct -p "Say hello"
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
### Notes
|
|
143
|
+
|
|
144
|
+
- Uses the OpenAI-compatible completions API under the hood
|
|
145
|
+
- Session affinity is maintained automatically via a per-request `x-session-affinity` header
|
|
146
|
+
|
|
106
147
|
## Ollama (Local)
|
|
107
148
|
|
|
108
149
|
Run open-source models locally without API keys or internet.
|
|
109
150
|
|
|
110
|
-
**Models**: `llama2`, `mistral`, `neural-chat`, and [others](https://ollama.ai/library)
|
|
151
|
+
**Models**: `llama2`, `mistral`, `neural-chat`, `qwen3.5:cloud` (262K context, thinking), and [others](https://ollama.ai/library)
|
|
111
152
|
|
|
112
153
|
### Setup
|
|
113
154
|
|
|
@@ -187,6 +187,10 @@ When your conversation grows long, tau automatically summarizes older messages t
|
|
|
187
187
|
- **`reserve_tokens`**: How many tokens to keep available for the LLM's response (default 16,384 ≈ 4K-5K words)
|
|
188
188
|
- **`keep_recent_tokens`**: How many recent message tokens to preserve word-for-word before summarization kicks in (default 20,000 ≈ 5K-6K words)
|
|
189
189
|
|
|
190
|
+
#### Mid-turn (threshold) compaction
|
|
191
|
+
|
|
192
|
+
In addition to compaction triggered at the start of a turn, tau can compact **mid-turn** when the context hits the configured limit while the agent is already running. When this happens the engine stops cleanly so you can review the compacted context and continue — no partial output is lost. Tool output lines are truncated before sending to the LLM to help prevent hitting the threshold in the first place.
|
|
193
|
+
|
|
190
194
|
Example configurations:
|
|
191
195
|
|
|
192
196
|
```json
|
|
@@ -284,6 +288,10 @@ These settings are applied to the LLM client at startup:
|
|
|
284
288
|
|
|
285
289
|
Changes take effect on the next session start or after `/reload`.
|
|
286
290
|
|
|
291
|
+
#### Adaptive retry delay
|
|
292
|
+
|
|
293
|
+
When a provider responds with a `Retry-After` or `Retry-After-Ms` header (common on rate-limit responses), tau uses that value as the retry delay instead of the configured `base_delay_ms`. The delay is capped at **60 seconds** so a provider that returns an extreme value (e.g. "retry in 16 days") doesn't stall the agent indefinitely. When no header is present, `base_delay_ms` is used.
|
|
294
|
+
|
|
287
295
|
```json
|
|
288
296
|
{
|
|
289
297
|
"retry": {
|
|
@@ -442,11 +450,11 @@ All retry settings are **fully implemented and wired to the LLM client at startu
|
|
|
442
450
|
All thinking budget settings are **fully implemented and configurable**:
|
|
443
451
|
|
|
444
452
|
- **`thinking_budgets.minimal`**: Token budget for "minimal" level (default: `1024`)
|
|
445
|
-
- **`thinking_budgets.low`**: Token budget for "low" level (default: `
|
|
446
|
-
- **`thinking_budgets.medium`**: Token budget for "medium" level (default: `
|
|
447
|
-
- **`thinking_budgets.high`**: Token budget for "high" level (default: `
|
|
448
|
-
- **`thinking_budgets.xhigh`**: Token budget for "xhigh" level (default: `
|
|
449
|
-
- **`thinking_budgets.max`**: Token budget for "max" level (default: `
|
|
453
|
+
- **`thinking_budgets.low`**: Token budget for "low" level (default: `4096`)
|
|
454
|
+
- **`thinking_budgets.medium`**: Token budget for "medium" level (default: `8192`)
|
|
455
|
+
- **`thinking_budgets.high`**: Token budget for "high" level (default: `16384`)
|
|
456
|
+
- **`thinking_budgets.xhigh`**: Token budget for "xhigh" level (default: `32768`)
|
|
457
|
+
- **`thinking_budgets.max`**: Token budget for "max" level (default: `65536`)
|
|
450
458
|
|
|
451
459
|
Override these to customize extended thinking token allocations for your workflow.
|
|
452
460
|
|
|
@@ -102,8 +102,8 @@ Prints session info inline in the chat. Shows:
|
|
|
102
102
|
|
|
103
103
|
- **Session Info** — Name (if set), File path, ID
|
|
104
104
|
- **Messages** — User, Assistant, Tool calls, Tool results, Total
|
|
105
|
-
- **Tokens** — Input, Output, Cache read (if any), Cache write (if any), Total
|
|
106
|
-
- **Cost** — Total USD cost (only shown if non-zero)
|
|
105
|
+
- **Tokens** — Input, Output, Cache read (if any), Cache write (if any), Total — counts use human-readable suffixes (e.g. `1.2K`, `3.4M`); each line shows an inline cost estimate in USD
|
|
106
|
+
- **Cost** — Total USD cost with inline estimate (only shown if non-zero)
|
|
107
107
|
|
|
108
108
|
### `/copy`
|
|
109
109
|
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "tau-coding-agent"
|
|
7
|
-
version = "0.3.
|
|
7
|
+
version = "0.3.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"
|
|
@@ -64,3 +64,17 @@ include = ["tau*"]
|
|
|
64
64
|
tau = [
|
|
65
65
|
"builtins/**/*",
|
|
66
66
|
]
|
|
67
|
+
|
|
68
|
+
[tool.pytest.ini_options]
|
|
69
|
+
testpaths = ["tests"]
|
|
70
|
+
|
|
71
|
+
[project.optional-dependencies]
|
|
72
|
+
tools = ["ripgrep>=14.0.0"]
|
|
73
|
+
|
|
74
|
+
[dependency-groups]
|
|
75
|
+
dev = [
|
|
76
|
+
"pytest>=9.1.1",
|
|
77
|
+
"ruff>=0.4.0",
|
|
78
|
+
"mypy>=1.10.0",
|
|
79
|
+
"pyright>=1.1.360",
|
|
80
|
+
]
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"""System prompt assembly for the coding agent."""
|
|
2
2
|
|
|
3
|
-
from tau.agent.prompt.types import PromptOptions
|
|
4
3
|
from tau.agent.prompt.builder import PromptBuilder, build_prompt
|
|
4
|
+
from tau.agent.prompt.types import PromptOptions
|
|
5
5
|
|
|
6
6
|
__all__ = [
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
"PromptOptions",
|
|
8
|
+
"PromptBuilder",
|
|
9
|
+
"build_prompt",
|
|
10
10
|
]
|
|
@@ -8,10 +8,11 @@ from pathlib import Path
|
|
|
8
8
|
|
|
9
9
|
from tau.agent.prompt.types import PromptOptions
|
|
10
10
|
from tau.settings.paths import (
|
|
11
|
-
get_system_prompt_path,
|
|
12
11
|
get_append_system_prompt_path,
|
|
13
12
|
get_docs_dir,
|
|
13
|
+
get_examples_path,
|
|
14
14
|
get_readme_path,
|
|
15
|
+
get_system_prompt_path,
|
|
15
16
|
)
|
|
16
17
|
|
|
17
18
|
|
|
@@ -32,14 +33,84 @@ def load_project_context_file(cwd: Path) -> tuple[str, Path] | None:
|
|
|
32
33
|
pass
|
|
33
34
|
return None
|
|
34
35
|
|
|
36
|
+
|
|
37
|
+
def _find_git_root(cwd: Path) -> Path | None:
|
|
38
|
+
"""Walk up from cwd and return the first directory containing .git, or None."""
|
|
39
|
+
current = cwd.resolve()
|
|
40
|
+
while True:
|
|
41
|
+
if (current / ".git").exists():
|
|
42
|
+
return current
|
|
43
|
+
parent = current.parent
|
|
44
|
+
if parent == current:
|
|
45
|
+
return None
|
|
46
|
+
current = parent
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def load_project_context_files(cwd: Path) -> list[tuple[str, Path]]:
|
|
50
|
+
"""Walk from git root (or cwd if not in a repo) down to cwd, collecting context files.
|
|
51
|
+
|
|
52
|
+
Returns (content, path) tuples ordered root-first so cwd instructions appear
|
|
53
|
+
last and take highest precedence when the model reads top-to-bottom.
|
|
54
|
+
"""
|
|
55
|
+
candidates = ["AGENTS.md", "AGENTS.MD", "CLAUDE.md", "CLAUDE.MD"]
|
|
56
|
+
|
|
57
|
+
def _load(directory: Path) -> tuple[str, Path] | None:
|
|
58
|
+
for filename in candidates:
|
|
59
|
+
path = directory / filename
|
|
60
|
+
if path.is_file():
|
|
61
|
+
try:
|
|
62
|
+
content = path.read_text(encoding="utf-8").strip()
|
|
63
|
+
return (content, path) if content else None
|
|
64
|
+
except OSError:
|
|
65
|
+
pass
|
|
66
|
+
return None
|
|
67
|
+
|
|
68
|
+
resolved = cwd.resolve()
|
|
69
|
+
git_root = _find_git_root(resolved)
|
|
70
|
+
stop_at = git_root if git_root else resolved
|
|
71
|
+
|
|
72
|
+
# Collect directories from stop_at down to cwd
|
|
73
|
+
dirs: list[Path] = []
|
|
74
|
+
current = resolved
|
|
75
|
+
while True:
|
|
76
|
+
dirs.append(current)
|
|
77
|
+
if current == stop_at:
|
|
78
|
+
break
|
|
79
|
+
parent = current.parent
|
|
80
|
+
if parent == current:
|
|
81
|
+
break
|
|
82
|
+
current = parent
|
|
83
|
+
|
|
84
|
+
seen: set[Path] = set()
|
|
85
|
+
results: list[tuple[str, Path]] = []
|
|
86
|
+
for directory in reversed(dirs):
|
|
87
|
+
entry = _load(directory)
|
|
88
|
+
if entry and entry[1] not in seen:
|
|
89
|
+
seen.add(entry[1])
|
|
90
|
+
results.append(entry)
|
|
91
|
+
|
|
92
|
+
return results
|
|
93
|
+
|
|
94
|
+
|
|
35
95
|
_DEFAULT_IDENTITY = """\
|
|
36
|
-
You are a coding agent
|
|
96
|
+
You are a coding agent operating inside Tau, a coding agent harness. You help users by
|
|
97
|
+
reading files, executing commands, editing code, and writing new files.
|
|
37
98
|
|
|
38
99
|
You have strong software engineering skills. You think carefully before making changes,
|
|
39
100
|
and follow the existing style and conventions of the project.
|
|
40
|
-
If a task is ambiguous, ask a clarifying question before proceeding.\
|
|
41
101
|
"""
|
|
42
102
|
|
|
103
|
+
_GENERAL_GUIDELINES = [
|
|
104
|
+
"If a task is ambiguous, ask a precise, clarifying question before proceeding.",
|
|
105
|
+
("Do only what the task asks; don't add features, refactors, or abstractions beyond scope."),
|
|
106
|
+
"Write comments when the *why* is non-obvious — well-named code explains itself.",
|
|
107
|
+
"Keep responses short, concise, and direct; don't summarize what you just did.",
|
|
108
|
+
(
|
|
109
|
+
"Prioritize accuracy over agreement — investigate before confirming, and "
|
|
110
|
+
"disagree when the evidence calls for it."
|
|
111
|
+
),
|
|
112
|
+
]
|
|
113
|
+
|
|
43
114
|
|
|
44
115
|
_GIT_STATUS_MAX_LINES = 30
|
|
45
116
|
_GIT_LOG_COUNT = 5
|
|
@@ -136,7 +207,8 @@ class PromptBuilder:
|
|
|
136
207
|
Assembles the system prompt from layered sources.
|
|
137
208
|
|
|
138
209
|
Layers in order:
|
|
139
|
-
Identity — SYSTEM.md if present, else built-in identity;
|
|
210
|
+
Identity — SYSTEM.md if present, else built-in identity;
|
|
211
|
+
--system bypasses entirely
|
|
140
212
|
Tools section — auto-generated from tool list (descriptions + guidelines)
|
|
141
213
|
Tau docs — tau documentation and examples
|
|
142
214
|
Project Instructions — AGENTS.md or CLAUDE.md from project (if present)
|
|
@@ -155,6 +227,7 @@ class PromptBuilder:
|
|
|
155
227
|
def build(self) -> str:
|
|
156
228
|
"""Build the complete system prompt."""
|
|
157
229
|
identity = self._identity()
|
|
230
|
+
guidelines = self._guidelines_section()
|
|
158
231
|
tools = self._tools_section()
|
|
159
232
|
docs = self._docs_section()
|
|
160
233
|
project_context = self._project_context_section()
|
|
@@ -162,7 +235,9 @@ class PromptBuilder:
|
|
|
162
235
|
append = self._append()
|
|
163
236
|
git = self._git_section()
|
|
164
237
|
footer = self._footer()
|
|
165
|
-
return
|
|
238
|
+
return (
|
|
239
|
+
identity + guidelines + tools + docs + project_context + skills + append + git + footer
|
|
240
|
+
)
|
|
166
241
|
|
|
167
242
|
# ------------------------------------------------------------------
|
|
168
243
|
# Layers
|
|
@@ -178,6 +253,10 @@ class PromptBuilder:
|
|
|
178
253
|
|
|
179
254
|
return _DEFAULT_IDENTITY
|
|
180
255
|
|
|
256
|
+
def _guidelines_section(self) -> str:
|
|
257
|
+
bullets = "\n".join(f"- {g}" for g in _GENERAL_GUIDELINES)
|
|
258
|
+
return f"\n\n# Guidelines\n\n{bullets}"
|
|
259
|
+
|
|
181
260
|
def _tools_section(self) -> str:
|
|
182
261
|
tools = self._opts.tools
|
|
183
262
|
if not tools:
|
|
@@ -194,6 +273,10 @@ class PromptBuilder:
|
|
|
194
273
|
if guideline:
|
|
195
274
|
guidelines.append(f"- **{t.name}**: {guideline.strip()}")
|
|
196
275
|
section = "\n\n# Available Tools\n\n" + "\n".join(lines)
|
|
276
|
+
section += (
|
|
277
|
+
"\nIn addition to the tools above, you may have access to other custom "
|
|
278
|
+
"tools depending on the project."
|
|
279
|
+
)
|
|
197
280
|
if guidelines:
|
|
198
281
|
section += "\n\n## Tool Guidelines\n\n" + "\n".join(guidelines)
|
|
199
282
|
return section
|
|
@@ -201,6 +284,10 @@ class PromptBuilder:
|
|
|
201
284
|
def _project_context_section(self) -> str:
|
|
202
285
|
"""Include project-specific context from AGENTS.md or CLAUDE.md if present.
|
|
203
286
|
|
|
287
|
+
Walks from git root down to cwd, loading one file per directory.
|
|
288
|
+
Each file is wrapped in <project_instructions path="..."> so the model
|
|
289
|
+
knows which directory each set of rules comes from.
|
|
290
|
+
|
|
204
291
|
Skipped if:
|
|
205
292
|
- disable_context_files is True (--no-context-files flag)
|
|
206
293
|
- project is not trusted (--no-approve flag or trust store)
|
|
@@ -209,36 +296,50 @@ class PromptBuilder:
|
|
|
209
296
|
return ""
|
|
210
297
|
if self._opts.project_trusted is False:
|
|
211
298
|
return ""
|
|
212
|
-
|
|
213
|
-
if not
|
|
299
|
+
files = load_project_context_files(self._opts.cwd)
|
|
300
|
+
if not files:
|
|
214
301
|
return ""
|
|
215
|
-
|
|
302
|
+
blocks = "".join(
|
|
303
|
+
f'<project_instructions path="{path}">\n{content}\n</project_instructions>\n\n'
|
|
304
|
+
for content, path in files
|
|
305
|
+
)
|
|
216
306
|
return (
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
"Follow project-specific instructions before general Tau guidelines."
|
|
307
|
+
"\n\n# Project Instructions\n\n"
|
|
308
|
+
"Project-specific guidelines (follow before general Tau guidelines):\n\n"
|
|
309
|
+
"<project_context>\n\n" + blocks + "</project_context>"
|
|
221
310
|
)
|
|
222
311
|
|
|
223
312
|
def _docs_section(self) -> str:
|
|
224
313
|
readme = get_readme_path()
|
|
225
314
|
docs = get_docs_dir()
|
|
315
|
+
examples = get_examples_path()
|
|
226
316
|
return (
|
|
227
317
|
"\n\nTau documentation (read only when the user asks about Tau itself, its"
|
|
228
318
|
" settings, extensions, themes, skills, tools, sessions, or keybindings):\n"
|
|
229
319
|
f"- README: {readme}\n"
|
|
230
320
|
f"- Docs directory: {docs}\n"
|
|
231
|
-
"-
|
|
321
|
+
f"- Examples directory: {examples} (extensions, custom tools, themes, skills)\n"
|
|
322
|
+
"- When asked about: quickstart (docs/quickstart.md),"
|
|
323
|
+
" installation (docs/installation.md),"
|
|
324
|
+
" usage (docs/usage.md), CLI flags (docs/cli-reference.md),"
|
|
325
|
+
" architecture (docs/architecture.md),"
|
|
326
|
+
" settings (docs/settings.md), tools (docs/tools.md),"
|
|
232
327
|
" extensions (docs/extensions.md), themes (docs/themes.md),"
|
|
233
|
-
" skills (docs/skills.md),
|
|
234
|
-
"
|
|
235
|
-
"
|
|
236
|
-
"
|
|
328
|
+
" skills (docs/skills.md), prompts (docs/prompts.md),"
|
|
329
|
+
" keybindings (docs/keybindings.md),"
|
|
330
|
+
" sessions (docs/sessions.md), messages (docs/messages.md),"
|
|
331
|
+
" Python API (docs/python-api.md),"
|
|
332
|
+
" inference providers (docs/inference-providers.md),"
|
|
333
|
+
" auth (docs/auth.md)\n"
|
|
334
|
+
"- Resolve all doc paths under the Docs directory above,"
|
|
335
|
+
" not the current working directory\n"
|
|
336
|
+
"- Resolve all example paths under the Examples directory above\n"
|
|
237
337
|
"- Read .md files completely and follow cross-references before answering"
|
|
238
338
|
)
|
|
239
339
|
|
|
240
340
|
def _skills_section(self) -> str:
|
|
241
341
|
from tau.skills.registry import skill_registry
|
|
342
|
+
|
|
242
343
|
block = skill_registry.format_for_system_prompt(self._opts.skills)
|
|
243
344
|
return f"\n\n{block}" if block else ""
|
|
244
345
|
|
|
@@ -2,13 +2,16 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
from pathlib import Path
|
|
4
4
|
from typing import Any
|
|
5
|
+
|
|
5
6
|
from pydantic import BaseModel, Field
|
|
7
|
+
|
|
6
8
|
from tau.tool.types import Tool
|
|
7
9
|
|
|
8
10
|
|
|
9
11
|
class PromptOptions(BaseModel):
|
|
10
12
|
"""Options for constructing the system prompt."""
|
|
11
|
-
|
|
13
|
+
|
|
14
|
+
model_config = {"arbitrary_types_allowed": True}
|
|
12
15
|
|
|
13
16
|
cwd: Path
|
|
14
17
|
tools: list[Tool] = Field(default_factory=list)
|