tau-coding-agent 0.3.5__tar.gz → 0.4.0__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.5/tau_coding_agent.egg-info → tau_coding_agent-0.4.0}/PKG-INFO +5 -3
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/README.md +2 -2
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/docs/auth.md +1 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/docs/extension-settings.md +211 -6
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/docs/extensions.md +0 -24
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/docs/inference-providers.md +42 -1
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/docs/settings.md +13 -5
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/docs/usage.md +2 -2
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/pyproject.toml +4 -1
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/agent/prompt/builder.py +15 -8
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/agent/service.py +200 -75
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/auth/manager.py +6 -2
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/builtins/extensions/footer/__init__.py +14 -9
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/builtins/extensions/footer/git.py +1 -1
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/builtins/extensions/footer/model.py +1 -1
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/builtins/extensions/header/__init__.py +8 -3
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/builtins/models/text.py +369 -3
- tau_coding_agent-0.4.0/tau/builtins/providers/audio.py +22 -0
- tau_coding_agent-0.4.0/tau/builtins/providers/image.py +31 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/builtins/providers/text.py +39 -0
- tau_coding_agent-0.4.0/tau/builtins/providers/video.py +11 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/builtins/tools/edit.py +1 -1
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/builtins/tools/glob.py +23 -4
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/builtins/tools/grep.py +58 -19
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/builtins/tools/ls.py +1 -1
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/builtins/tools/read.py +5 -3
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/builtins/tools/terminal.py +48 -19
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/builtins/tools/write.py +1 -1
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/console/cli.py +61 -11
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/console/commands/auth.py +14 -3
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/core/registry.py +1 -1
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/engine/service.py +249 -149
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/engine/types.py +2 -1
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/extensions/__init__.py +0 -2
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/extensions/api.py +151 -24
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/extensions/context.py +78 -2
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/extensions/loader.py +63 -17
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/extensions/runtime.py +15 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/hooks/engine.py +14 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/hooks/service.py +3 -3
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/__init__.py +3 -3
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/audio/gemini_audio.py +2 -2
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/audio/service.py +38 -3
- tau_coding_agent-0.4.0/tau/inference/api/availability.py +64 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/image/gemini_image.py +2 -2
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/image/service.py +22 -2
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/text/anthropic_claude_code.py +30 -12
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/text/anthropic_messages.py +36 -13
- tau_coding_agent-0.4.0/tau/inference/api/text/anthropic_vertex.py +273 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/text/builtins.py +3 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/text/gemini_generate.py +26 -22
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/text/github_copilot_chat.py +5 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/text/google_antigravity.py +29 -8
- tau_coding_agent-0.4.0/tau/inference/api/text/google_vertex.py +368 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/text/mistral_chat.py +4 -1
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/text/ollama_chat.py +4 -1
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/text/openai_codex_responses.py +11 -11
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/text/openai_completions.py +5 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/text/openai_responses.py +16 -12
- tau_coding_agent-0.4.0/tau/inference/api/text/openai_vertex.py +309 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/text/service.py +108 -55
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/video/service.py +22 -2
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/model/types.py +16 -1
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/provider/oauth/__init__.py +11 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/provider/oauth/utils.py +4 -1
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/provider/registry.py +8 -12
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/provider/types.py +6 -3
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/types.py +1 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/utils.py +49 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/message/types.py +9 -21
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/message/utils.py +3 -2
- {tau_coding_agent-0.3.5/tau/tui → tau_coding_agent-0.4.0/tau/modes/interactive}/agent_hooks.py +6 -3
- {tau_coding_agent-0.3.5/tau/tui → tau_coding_agent-0.4.0/tau/modes/interactive}/app.py +119 -64
- tau_coding_agent-0.4.0/tau/modes/interactive/commands/__init__.py +3 -0
- {tau_coding_agent-0.3.5/tau/tui → tau_coding_agent-0.4.0/tau/modes/interactive}/commands/appearance.py +47 -12
- {tau_coding_agent-0.3.5/tau/tui → tau_coding_agent-0.4.0/tau/modes/interactive}/commands/auth.py +99 -57
- {tau_coding_agent-0.3.5/tau/tui → tau_coding_agent-0.4.0/tau/modes/interactive}/commands/context.py +4 -4
- tau_coding_agent-0.4.0/tau/modes/interactive/commands/extensions.py +107 -0
- {tau_coding_agent-0.3.5/tau/tui → tau_coding_agent-0.4.0/tau/modes/interactive}/commands/misc.py +1 -1
- tau_coding_agent-0.4.0/tau/modes/interactive/commands/model.py +198 -0
- {tau_coding_agent-0.3.5/tau/tui → tau_coding_agent-0.4.0/tau/modes/interactive}/commands/session.py +41 -12
- tau_coding_agent-0.4.0/tau/modes/interactive/components/__init__.py +0 -0
- {tau_coding_agent-0.3.5/tau/tui → tau_coding_agent-0.4.0/tau/modes/interactive}/components/command_palette.py +18 -9
- tau_coding_agent-0.4.0/tau/modes/interactive/components/config_selector.py +225 -0
- tau_coding_agent-0.4.0/tau/modes/interactive/components/extension_selector.py +116 -0
- {tau_coding_agent-0.3.5/tau/tui → tau_coding_agent-0.4.0/tau/modes/interactive}/components/file_picker.py +21 -10
- {tau_coding_agent-0.3.5/tau/tui → tau_coding_agent-0.4.0/tau/modes/interactive}/components/layout.py +369 -120
- {tau_coding_agent-0.3.5/tau/tui → tau_coding_agent-0.4.0/tau/modes/interactive}/components/message_list.py +18 -9
- tau_coding_agent-0.4.0/tau/modes/interactive/components/model_selector.py +283 -0
- tau_coding_agent-0.4.0/tau/modes/interactive/components/oauth_selector.py +128 -0
- tau_coding_agent-0.3.5/tau/tui/components/prompt_overlay.py → tau_coding_agent-0.4.0/tau/modes/interactive/components/overlays.py +163 -3
- tau_coding_agent-0.3.5/tau/tui/components/resume_modal.py → tau_coding_agent-0.4.0/tau/modes/interactive/components/session_selector.py +44 -46
- tau_coding_agent-0.4.0/tau/modes/interactive/components/settings_selector.py +619 -0
- tau_coding_agent-0.4.0/tau/modes/interactive/components/theme_selector.py +103 -0
- tau_coding_agent-0.4.0/tau/modes/interactive/components/thinking_selector.py +94 -0
- tau_coding_agent-0.3.5/tau/tui/components/tree_select_list.py → tau_coding_agent-0.4.0/tau/modes/interactive/components/tree_selector.py +2 -2
- {tau_coding_agent-0.3.5/tau/tui → tau_coding_agent-0.4.0/tau/modes/interactive}/components/trust_screen.py +16 -15
- tau_coding_agent-0.4.0/tau/modes/print/__init__.py +0 -0
- tau_coding_agent-0.4.0/tau/modes/rpc/__init__.py +8 -0
- {tau_coding_agent-0.3.5/tau → tau_coding_agent-0.4.0/tau/modes}/rpc/mode.py +8 -4
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/packages/manager.py +5 -2
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/runtime/service.py +52 -31
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/runtime/types.py +20 -15
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/session/compaction.py +47 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/session/manager.py +36 -8
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/session/utils.py +55 -3
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/settings/manager.py +85 -33
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/settings/types.py +27 -3
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/themes/loader.py +77 -3
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/themes/registry.py +15 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/tool/render.py +1 -1
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/tool/types.py +9 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/trust/manager.py +7 -1
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/tui/__init__.py +16 -1
- tau_coding_agent-0.3.5/tau/tui/components/autocomplete_manager.py → tau_coding_agent-0.4.0/tau/tui/autocomplete.py +214 -11
- tau_coding_agent-0.4.0/tau/tui/component.py +512 -0
- tau_coding_agent-0.4.0/tau/tui/components/__init__.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/tui/components/box.py +17 -1
- tau_coding_agent-0.4.0/tau/tui/components/editor.py +72 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/tui/components/image.py +10 -3
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/tui/components/select_list.py +41 -4
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/tui/components/text_input.py +158 -42
- tau_coding_agent-0.3.5/tau/tui/input_handler.py → tau_coding_agent-0.4.0/tau/tui/input.py +982 -23
- tau_coding_agent-0.4.0/tau/tui/keybinding_hints.py +40 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/tui/markdown.py +87 -14
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/tui/terminal.py +145 -16
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/tui/theme.py +20 -2
- tau_coding_agent-0.4.0/tau/tui/tui.py +1266 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/tui/ui_context.py +90 -6
- tau_coding_agent-0.3.5/tau/tui/ansi.py → tau_coding_agent-0.4.0/tau/tui/utils.py +258 -0
- tau_coding_agent-0.4.0/tau/utils/__init__.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/utils/image_processing.py +2 -2
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/utils/secrets.py +16 -3
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0/tau_coding_agent.egg-info}/PKG-INFO +5 -3
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau_coding_agent.egg-info/SOURCES.txt +48 -40
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau_coding_agent.egg-info/requires.txt +3 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_ansi.py +146 -1
- tau_coding_agent-0.4.0/tests/test_auth_command.py +41 -0
- tau_coding_agent-0.4.0/tests/test_auth_storage.py +106 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_builtin_tools.py +43 -0
- tau_coding_agent-0.4.0/tests/test_compaction.py +433 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_diff.py +1 -1
- tau_coding_agent-0.4.0/tests/test_editor_protocol.py +67 -0
- tau_coding_agent-0.4.0/tests/test_engine_steering.py +274 -0
- tau_coding_agent-0.4.0/tests/test_extension_api.py +182 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_fuzzy.py +1 -1
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_image_processing.py +69 -0
- tau_coding_agent-0.4.0/tests/test_inference_api_text_utils.py +127 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_keybindings.py +4 -4
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_markdown.py +42 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_message_types.py +83 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_message_utils.py +27 -0
- tau_coding_agent-0.4.0/tests/test_model_availability.py +118 -0
- tau_coding_agent-0.4.0/tests/test_model_selector_modal.py +153 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_packages_utils.py +48 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_provider_registry.py +6 -6
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_rpc_mode.py +126 -5
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_secrets.py +6 -1
- tau_coding_agent-0.4.0/tests/test_session_trust_persist.py +154 -0
- tau_coding_agent-0.4.0/tests/test_session_utils.py +443 -0
- tau_coding_agent-0.4.0/tests/test_settings_manager.py +253 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_settings_paths.py +29 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_settings_storage.py +42 -0
- tau_coding_agent-0.4.0/tests/test_text_llm_invoke.py +308 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_tool_registry.py +27 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_tool_render.py +1 -1
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_trust_utils.py +29 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_tui_capabilities.py +1 -1
- tau_coding_agent-0.4.0/tests/test_tui_input.py +470 -0
- tau_coding_agent-0.4.0/tests/test_tui_layout_sizing.py +182 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_tui_utils.py +9 -2
- tau_coding_agent-0.3.5/tau/builtins/providers/audio.py +0 -10
- tau_coding_agent-0.3.5/tau/builtins/providers/image.py +0 -15
- tau_coding_agent-0.3.5/tau/builtins/providers/video.py +0 -8
- tau_coding_agent-0.3.5/tau/extensions/events.py +0 -71
- tau_coding_agent-0.3.5/tau/rpc/__init__.py +0 -8
- tau_coding_agent-0.3.5/tau/tui/autocomplete.py +0 -36
- tau_coding_agent-0.3.5/tau/tui/capabilities.py +0 -124
- tau_coding_agent-0.3.5/tau/tui/commands/__init__.py +0 -3
- tau_coding_agent-0.3.5/tau/tui/commands/model.py +0 -129
- tau_coding_agent-0.3.5/tau/tui/component.py +0 -258
- tau_coding_agent-0.3.5/tau/tui/components/autocomplete_picker.py +0 -147
- tau_coding_agent-0.3.5/tau/tui/components/dynamic_border.py +0 -19
- tau_coding_agent-0.3.5/tau/tui/components/inline_selector.py +0 -73
- tau_coding_agent-0.3.5/tau/tui/components/modal.py +0 -97
- tau_coding_agent-0.3.5/tau/tui/components/model_palette.py +0 -221
- tau_coding_agent-0.3.5/tau/tui/components/picker_overlay.py +0 -178
- tau_coding_agent-0.3.5/tau/tui/components/settings_modal.py +0 -277
- tau_coding_agent-0.3.5/tau/tui/components/settings_schema.py +0 -223
- tau_coding_agent-0.3.5/tau/tui/components/text_prompt.py +0 -83
- tau_coding_agent-0.3.5/tau/tui/diff.py +0 -114
- tau_coding_agent-0.3.5/tau/tui/fuzzy.py +0 -99
- tau_coding_agent-0.3.5/tau/tui/input.py +0 -770
- tau_coding_agent-0.3.5/tau/tui/keybindings.py +0 -90
- tau_coding_agent-0.3.5/tau/tui/message_renderers.py +0 -32
- tau_coding_agent-0.3.5/tau/tui/overlay.py +0 -334
- tau_coding_agent-0.3.5/tau/tui/renderer.py +0 -385
- tau_coding_agent-0.3.5/tau/tui/tui.py +0 -552
- tau_coding_agent-0.3.5/tau/tui/utils.py +0 -20
- tau_coding_agent-0.3.5/tests/test_auth_storage.py +0 -43
- tau_coding_agent-0.3.5/tests/test_compaction.py +0 -214
- tau_coding_agent-0.3.5/tests/test_session_utils.py +0 -169
- tau_coding_agent-0.3.5/tests/test_settings_manager.py +0 -150
- tau_coding_agent-0.3.5/tests/test_tui_input.py +0 -211
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/LICENSE +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/MANIFEST.in +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/docs/IMPLEMENTATION_SUMMARY.md +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/docs/architecture.md +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/docs/cli-reference.md +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/docs/development.md +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/docs/docs.json +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/docs/http-proxy.md +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/docs/index.md +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/docs/installation.md +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/docs/keybindings.md +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/docs/messages.md +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/docs/project-context.md +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/docs/project-structure.md +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/docs/prompts.md +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/docs/python-api.md +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/docs/quickstart.md +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/docs/sessions.md +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/docs/skills.md +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/docs/themes.md +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/docs/tools.md +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/setup.cfg +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/__init__.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/agent/__init__.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/agent/prompt/__init__.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/agent/prompt/types.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/agent/types.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/auth/storage.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/auth/types.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/builtins/__init__.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/builtins/commands/__init__.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/builtins/commands/clear.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/builtins/commands/compact.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/builtins/commands/reload.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/builtins/commands/session.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/builtins/extensions/footer/utils.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/builtins/models/__init__.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/builtins/models/audio.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/builtins/models/image.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/builtins/models/video.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/builtins/prompts/commit.md +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/builtins/prompts/docs.md +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/builtins/prompts/explain.md +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/builtins/prompts/fix.md +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/builtins/prompts/refactor.md +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/builtins/prompts/review.md +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/builtins/prompts/test.md +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/builtins/providers/__init__.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/builtins/skills/code-review/SKILL.md +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/builtins/skills/debug/SKILL.md +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/builtins/skills/git-commit/SKILL.md +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/builtins/themes/dark.yaml +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/builtins/themes/light.yaml +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/builtins/tools/__init__.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/commands/__init__.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/commands/registry.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/commands/types.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/console/__init__.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/console/commands/__init__.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/console/commands/packages.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/console/commands/update.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/core/__init__.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/engine/__init__.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/extensions/settings.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/hooks/__init__.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/hooks/inference.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/hooks/runtime.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/hooks/session.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/hooks/tui.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/hooks/types.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/__init__.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/audio/__init__.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/audio/base.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/audio/builtins.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/audio/elevenlabs_audio.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/audio/openai_audio.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/audio/registry.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/audio/sarvam_audio.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/audio/utils.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/image/__init__.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/image/base.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/image/builtins.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/image/openai_image.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/image/openrouter.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/image/registry.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/registry.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/text/__init__.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/text/base.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/text/registry.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/text/types.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/text/utils.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/video/__init__.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/video/base.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/video/builtins.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/video/fal_video.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/video/openrouter_video.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/video/registry.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/model/__init__.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/model/registry.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/provider/__init__.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/provider/oauth/anthropic_claude_code.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/provider/oauth/github_copilot.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/provider/oauth/google_antigravity.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/provider/oauth/openai_codex.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/provider/oauth/pkce.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/provider/oauth/types.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/message/__init__.py +0 -0
- {tau_coding_agent-0.3.5/tau/tui/components → tau_coding_agent-0.4.0/tau/modes}/__init__.py +0 -0
- {tau_coding_agent-0.3.5/tau/utils → tau_coding_agent-0.4.0/tau/modes/interactive}/__init__.py +0 -0
- {tau_coding_agent-0.3.5/tau → tau_coding_agent-0.4.0/tau/modes}/rpc/types.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/packages/__init__.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/packages/types.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/packages/utils.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/prompts/expand.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/prompts/loader.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/prompts/registry.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/prompts/types.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/session/branch_summarization.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/session/types.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/settings/paths.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/settings/storage.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/settings/utils.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/skills/loader.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/skills/registry.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/skills/types.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/themes/types.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/tool/__init__.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/tool/registry.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/trust/__init__.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/trust/types.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/trust/utils.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/tui/components/spinner.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/utils/http_proxy.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/utils/version_check.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau_coding_agent.egg-info/dependency_links.txt +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau_coding_agent.egg-info/entry_points.txt +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau_coding_agent.egg-info/top_level.txt +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_agent_prompt.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_agent_types.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_auth_manager.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_branch_summarization.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_command_registry.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_engine_types.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_footer_utils.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_http_proxy.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_inference_error_utils.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_inference_types.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_inference_utils.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_model_registry.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_model_types.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_oauth_utils.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_pkce.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_prompts_expand.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_prompts_loader.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_prompts_registry.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_session_types.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_settings_utils.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_skills_loader.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_skills_registry.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_theme_loader.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_themes_registry.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_trust_manager.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_tui_theme.py +0 -0
- {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_version_check.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: tau-coding-agent
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.4.0
|
|
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,11 +26,13 @@ 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 (τ)
|
|
32
34
|
|
|
33
|
-
|
|
35
|
+
A Python reimplementation of [Pi](https://pi.dev), **Tau** brings the same agent framework capabilities to Python developers. A self-extensible agent CLI with a terminal UI, multi-provider LLM support, session management with branching, and a plugin system for tools, commands, and customization.
|
|
34
36
|
|
|
35
37
|
<p align="center">
|
|
36
38
|
<img src="assets/tui.png" alt="Tau TUI" width="700">
|
|
@@ -45,7 +47,7 @@ Start a conversation with the agent in the terminal.
|
|
|
45
47
|
### Installation
|
|
46
48
|
|
|
47
49
|
```bash
|
|
48
|
-
pip install tau-coding-agent
|
|
50
|
+
uv pip install tau-coding-agent
|
|
49
51
|
```
|
|
50
52
|
|
|
51
53
|
Or install from source:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Tau (τ)
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
A Python reimplementation of [Pi](https://pi.dev), **Tau** brings the same agent framework capabilities to Python developers. A self-extensible agent CLI with a terminal UI, multi-provider LLM support, session management with branching, and a plugin system for tools, commands, and customization.
|
|
4
4
|
|
|
5
5
|
<p align="center">
|
|
6
6
|
<img src="assets/tui.png" alt="Tau TUI" width="700">
|
|
@@ -15,7 +15,7 @@ Start a conversation with the agent in the terminal.
|
|
|
15
15
|
### Installation
|
|
16
16
|
|
|
17
17
|
```bash
|
|
18
|
-
pip install tau-coding-agent
|
|
18
|
+
uv pip install tau-coding-agent
|
|
19
19
|
```
|
|
20
20
|
|
|
21
21
|
Or install from source:
|
|
@@ -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
|
|
@@ -21,7 +21,7 @@ def register(tau):
|
|
|
21
21
|
timeout = config.get("timeout_ms", 5000)
|
|
22
22
|
```
|
|
23
23
|
|
|
24
|
-
|
|
24
|
+
The values are stored in `~/.tau/settings.json` (global) or `.tau/settings.json` (project-local):
|
|
25
25
|
|
|
26
26
|
```json
|
|
27
27
|
{
|
|
@@ -39,6 +39,71 @@ In `~/.tau/settings.json` or `.tau/settings.json`:
|
|
|
39
39
|
}
|
|
40
40
|
```
|
|
41
41
|
|
|
42
|
+
### Where settings live
|
|
43
|
+
|
|
44
|
+
Settings for an extension are stored in the `settings` object of its entry inside `extensions.list`. Tau matches entries by path — the path in the list must match the path or directory the extension was loaded from.
|
|
45
|
+
|
|
46
|
+
**Project-local** — `.tau/settings.json` (only applies in this directory):
|
|
47
|
+
|
|
48
|
+
```json
|
|
49
|
+
{
|
|
50
|
+
"extensions": {
|
|
51
|
+
"list": [
|
|
52
|
+
{
|
|
53
|
+
"path": ".tau/extensions/lsp",
|
|
54
|
+
"settings": {
|
|
55
|
+
"lsp": true,
|
|
56
|
+
"eager": [],
|
|
57
|
+
"servers": {
|
|
58
|
+
"pyright": { "enabled": true },
|
|
59
|
+
"ruff": { "enabled": true },
|
|
60
|
+
"typescript-language-server": { "enabled": false }
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"path": ".tau/extensions/voice",
|
|
66
|
+
"settings": {
|
|
67
|
+
"enabled": true,
|
|
68
|
+
"stt_model": "whisper-1",
|
|
69
|
+
"stt_provider": "openai",
|
|
70
|
+
"hold_seconds": 2,
|
|
71
|
+
"sample_rate": 16000
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
]
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
**Global** — `~/.tau/settings.json` (applies to every project):
|
|
80
|
+
|
|
81
|
+
```json
|
|
82
|
+
{
|
|
83
|
+
"extensions": {
|
|
84
|
+
"list": [
|
|
85
|
+
{
|
|
86
|
+
"path": "~/.tau/extensions/web-search",
|
|
87
|
+
"settings": {
|
|
88
|
+
"enabled": true,
|
|
89
|
+
"engine": "ddgs",
|
|
90
|
+
"results": 10
|
|
91
|
+
}
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
"path": "~/.tau/extensions/my_ext.py",
|
|
95
|
+
"settings": {
|
|
96
|
+
"api_key": "sk-...",
|
|
97
|
+
"timeout_ms": 5000
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
]
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
Both files can coexist — project settings are merged on top of global settings at startup. Extensions loaded from `.tau/extensions/` read from the project file; extensions loaded from `~/.tau/extensions/` read from the global file.
|
|
106
|
+
|
|
42
107
|
## Nested Structures
|
|
43
108
|
|
|
44
109
|
`ExtensionSettings` handles nested configuration just as naturally:
|
|
@@ -237,7 +302,147 @@ def register(tau):
|
|
|
237
302
|
|
|
238
303
|
Extensions can register settings items that appear as a named sub-panel at the bottom of the interactive `/settings` panel. Users can then edit extension settings from the TUI without touching JSON.
|
|
239
304
|
|
|
240
|
-
|
|
305
|
+
There are two ways to do this: declare the schema in `manifest.json` (recommended for directory extensions) or register it imperatively with `tau.register_settings()` (useful for single-file extensions).
|
|
306
|
+
|
|
307
|
+
---
|
|
308
|
+
|
|
309
|
+
### Option A — manifest.json schema (recommended)
|
|
310
|
+
|
|
311
|
+
Add a `"settings"` block under the `"tau"` key in `manifest.json`. Tau reads it at load time, builds the `/settings` sub-panel automatically, reads current values from the extension's config, and persists changes back to `settings.json` (reloading just that extension so the change applies live — no restart needed).
|
|
312
|
+
|
|
313
|
+
```json
|
|
314
|
+
{
|
|
315
|
+
"tau": {
|
|
316
|
+
"extensions": ["__init__.py"],
|
|
317
|
+
"dependencies": ["requests"],
|
|
318
|
+
"settings": {
|
|
319
|
+
"title": "Web search",
|
|
320
|
+
"fields": [
|
|
321
|
+
{
|
|
322
|
+
"key": "enabled",
|
|
323
|
+
"label": "Enabled",
|
|
324
|
+
"type": "bool",
|
|
325
|
+
"default": true,
|
|
326
|
+
"description": "Enable or disable the web search extension."
|
|
327
|
+
},
|
|
328
|
+
{
|
|
329
|
+
"key": "engine",
|
|
330
|
+
"label": "Search engine",
|
|
331
|
+
"type": "enum",
|
|
332
|
+
"values": ["ddgs", "exa", "tavily"],
|
|
333
|
+
"default": "ddgs",
|
|
334
|
+
"description": "Which search backend to use."
|
|
335
|
+
},
|
|
336
|
+
{
|
|
337
|
+
"key": "results",
|
|
338
|
+
"label": "Max results",
|
|
339
|
+
"type": "int",
|
|
340
|
+
"default": 10,
|
|
341
|
+
"min": 1,
|
|
342
|
+
"max": 50,
|
|
343
|
+
"description": "Number of results returned per query."
|
|
344
|
+
},
|
|
345
|
+
{
|
|
346
|
+
"key": "api_key",
|
|
347
|
+
"label": "API key",
|
|
348
|
+
"type": "secret",
|
|
349
|
+
"default": "",
|
|
350
|
+
"description": "Provider API key (stored in settings.json)."
|
|
351
|
+
},
|
|
352
|
+
{
|
|
353
|
+
"key": "exa",
|
|
354
|
+
"label": "Exa settings",
|
|
355
|
+
"type": "group",
|
|
356
|
+
"fields": [
|
|
357
|
+
{
|
|
358
|
+
"key": "base_url",
|
|
359
|
+
"label": "Base URL",
|
|
360
|
+
"type": "string",
|
|
361
|
+
"default": "https://api.exa.ai"
|
|
362
|
+
},
|
|
363
|
+
{
|
|
364
|
+
"key": "highlights",
|
|
365
|
+
"label": "Highlights",
|
|
366
|
+
"type": "bool",
|
|
367
|
+
"default": true
|
|
368
|
+
}
|
|
369
|
+
]
|
|
370
|
+
}
|
|
371
|
+
]
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
```
|
|
376
|
+
|
|
377
|
+
The corresponding `.tau/settings.json` entry that stores the current values:
|
|
378
|
+
|
|
379
|
+
```json
|
|
380
|
+
{
|
|
381
|
+
"extensions": {
|
|
382
|
+
"list": [
|
|
383
|
+
{
|
|
384
|
+
"path": ".tau/extensions/web-search",
|
|
385
|
+
"settings": {
|
|
386
|
+
"enabled": true,
|
|
387
|
+
"engine": "exa",
|
|
388
|
+
"results": 20,
|
|
389
|
+
"api_key": "sk-exa-...",
|
|
390
|
+
"exa": {
|
|
391
|
+
"base_url": "https://api.exa.ai",
|
|
392
|
+
"highlights": false
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
]
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
```
|
|
400
|
+
|
|
401
|
+
#### Field types
|
|
402
|
+
|
|
403
|
+
| Type | UI control | Notes |
|
|
404
|
+
|------|-----------|-------|
|
|
405
|
+
| `bool` | Toggle `off` / `on` | Stored as a JSON boolean in settings |
|
|
406
|
+
| `int` | Text input (numeric) | Optional `min` and `max` clamps |
|
|
407
|
+
| `string` | Text input | Optional `pattern` (regex the value must match) |
|
|
408
|
+
| `secret` | Text input | Same as `string`; signals sensitive content |
|
|
409
|
+
| `text` | Text input | Same as `string`; intended for longer values |
|
|
410
|
+
| `enum` or `select` | Cycle through values on Enter | Requires a non-empty `"values"` list |
|
|
411
|
+
| `group` | Opens a nested sub-panel | Contains a `"fields"` list; keys are prefixed |
|
|
412
|
+
|
|
413
|
+
#### Field properties
|
|
414
|
+
|
|
415
|
+
| Property | Required | Description |
|
|
416
|
+
|----------|----------|-------------|
|
|
417
|
+
| `key` | Yes | Setting key. Supports dot-notation: `"exa.api_key"` is equivalent to nesting under a `"exa"` group |
|
|
418
|
+
| `label` | Yes | Display text shown in the `/settings` panel |
|
|
419
|
+
| `type` | No (defaults to `string`) | One of the types listed above |
|
|
420
|
+
| `default` | No | Fallback value when the key is absent from settings |
|
|
421
|
+
| `description` | No | Dimmed help text shown below the label |
|
|
422
|
+
| `values` | `enum`/`select` only | List of allowed values to cycle through |
|
|
423
|
+
| `min` / `max` | `int` only | Clamp the entered value to this range |
|
|
424
|
+
| `pattern` | `string`/`secret`/`text` | Regex the value must fully match; invalid input is silently ignored |
|
|
425
|
+
| `fields` | `group` only | Nested list of field definitions |
|
|
426
|
+
|
|
427
|
+
#### Summary badge
|
|
428
|
+
|
|
429
|
+
The first top-level `bool` field is automatically used as an on/off summary badge on the extension's parent row in the main `/settings` list. This lets users see at a glance whether an extension is enabled without opening its sub-panel.
|
|
430
|
+
|
|
431
|
+
#### Dot-notation keys
|
|
432
|
+
|
|
433
|
+
`"key": "exa.api_key"` at the top level is exactly equivalent to a field with `"key": "api_key"` nested inside a group with `"key": "exa"`. Both read and write the same path in settings:
|
|
434
|
+
|
|
435
|
+
```json
|
|
436
|
+
{ "exa": { "api_key": "sk-..." } }
|
|
437
|
+
```
|
|
438
|
+
|
|
439
|
+
Use the explicit `group` type when you want the sub-panel to have a header label. Use dot-notation directly when you just want nested storage without the extra level of UI.
|
|
440
|
+
|
|
441
|
+
---
|
|
442
|
+
|
|
443
|
+
### Option B — `tau.register_settings()` (imperative)
|
|
444
|
+
|
|
445
|
+
#### Basic example
|
|
241
446
|
|
|
242
447
|
```python
|
|
243
448
|
from tau.tui.components.settings_modal import SettingItem
|
|
@@ -254,7 +459,7 @@ def register(tau):
|
|
|
254
459
|
], title="My Extension", on_change=on_change)
|
|
255
460
|
```
|
|
256
461
|
|
|
257
|
-
|
|
462
|
+
#### `tau.register_settings(items, title, on_change)`
|
|
258
463
|
|
|
259
464
|
Registers a sub-panel in `/settings` containing the provided items.
|
|
260
465
|
|
|
@@ -264,7 +469,7 @@ Registers a sub-panel in `/settings` containing the provided items.
|
|
|
264
469
|
| `title` | `str` | The sub-panel title shown in the list |
|
|
265
470
|
| `on_change` | `callable(key, value)` | Called when the user changes a value |
|
|
266
471
|
|
|
267
|
-
|
|
472
|
+
#### `SettingItem` fields
|
|
268
473
|
|
|
269
474
|
| Field | Type | Description |
|
|
270
475
|
|-------|------|-------------|
|
|
@@ -278,7 +483,7 @@ Registers a sub-panel in `/settings` containing the provided items.
|
|
|
278
483
|
| `submenu_settings` | `list[SettingItem] \| None` | Open a full nested sub-panel with these items (arbitrary depth) |
|
|
279
484
|
| `submenu_on_change` | `callable \| None` | Overrides the parent `on_change` for a nested sub-panel |
|
|
280
485
|
|
|
281
|
-
|
|
486
|
+
#### Nested sub-panels
|
|
282
487
|
|
|
283
488
|
A `SettingItem` with `submenu_settings` opens another level of the settings panel. Nesting can be arbitrarily deep. Use `submenu_on_change` to override the change callback for that level:
|
|
284
489
|
|
|
@@ -298,7 +503,7 @@ tau.register_settings([
|
|
|
298
503
|
], title="My Extension", on_change=on_change)
|
|
299
504
|
```
|
|
300
505
|
|
|
301
|
-
|
|
506
|
+
#### `tau.settings.set_extension_config_key(ext_path, key, value)`
|
|
302
507
|
|
|
303
508
|
Persists a value back to `extensions.list[].settings` in `settings.json`.
|
|
304
509
|
|
|
@@ -627,29 +627,6 @@ session working directory; pass an explicit `cwd=` to override.
|
|
|
627
627
|
|
|
628
628
|
---
|
|
629
629
|
|
|
630
|
-
## Cross-extension event bus
|
|
631
|
-
|
|
632
|
-
Extensions can communicate with each other via `tau.events`:
|
|
633
|
-
|
|
634
|
-
```python
|
|
635
|
-
# producer.py
|
|
636
|
-
def register(tau):
|
|
637
|
-
@tau.on("session_start")
|
|
638
|
-
async def on_start(event, ctx):
|
|
639
|
-
await tau.events.emit("producer:ready", {"version": "1.0"})
|
|
640
|
-
|
|
641
|
-
# consumer.py
|
|
642
|
-
def register(tau):
|
|
643
|
-
@tau.events.on("producer:ready")
|
|
644
|
-
async def on_ready(data):
|
|
645
|
-
print(f"producer ready — version {data['version']}")
|
|
646
|
-
```
|
|
647
|
-
|
|
648
|
-
This is separate from the hooks bus: `tau.events` is for extension-to-extension
|
|
649
|
-
messages; `tau.on(...)` is for system lifecycle events.
|
|
650
|
-
|
|
651
|
-
---
|
|
652
|
-
|
|
653
630
|
## Editor autocomplete providers
|
|
654
631
|
|
|
655
632
|
Extensions can inject custom autocomplete suggestions into the editor. When the user
|
|
@@ -742,7 +719,6 @@ def register(tau):
|
|
|
742
719
|
| `tau.register_flag(name, type, env, default)` | Declare an env-backed flag |
|
|
743
720
|
| `tau.get_flag(name)` | Read a registered flag's value |
|
|
744
721
|
| `await tau.exec(cmd, args, cwd)` | Run a shell command |
|
|
745
|
-
| `tau.events` | Cross-extension `EventBus` |
|
|
746
722
|
| `tau.config` | Per-extension settings dict from `settings.json` |
|
|
747
723
|
| `tau.cwd` | `Path` — working directory at session start |
|
|
748
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.
|
|
7
|
+
version = "0.4.0"
|
|
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"
|
|
@@ -68,6 +68,9 @@ tau = [
|
|
|
68
68
|
[tool.pytest.ini_options]
|
|
69
69
|
testpaths = ["tests"]
|
|
70
70
|
|
|
71
|
+
[project.optional-dependencies]
|
|
72
|
+
tools = ["ripgrep>=14.0.0"]
|
|
73
|
+
|
|
71
74
|
[dependency-groups]
|
|
72
75
|
dev = [
|
|
73
76
|
"pytest>=9.1.1",
|
|
@@ -93,7 +93,8 @@ def load_project_context_files(cwd: Path) -> list[tuple[str, Path]]:
|
|
|
93
93
|
|
|
94
94
|
|
|
95
95
|
_DEFAULT_IDENTITY = """\
|
|
96
|
-
You are a coding agent operating inside Tau, a coding agent harness. You help users by
|
|
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.
|
|
97
98
|
|
|
98
99
|
You have strong software engineering skills. You think carefully before making changes,
|
|
99
100
|
and follow the existing style and conventions of the project.
|
|
@@ -101,10 +102,13 @@ and follow the existing style and conventions of the project.
|
|
|
101
102
|
|
|
102
103
|
_GENERAL_GUIDELINES = [
|
|
103
104
|
"If a task is ambiguous, ask a precise, clarifying question before proceeding.",
|
|
104
|
-
"Do only what the task asks; don't add features, refactors, or abstractions beyond scope.",
|
|
105
|
+
("Do only what the task asks; don't add features, refactors, or abstractions beyond scope."),
|
|
105
106
|
"Write comments when the *why* is non-obvious — well-named code explains itself.",
|
|
106
107
|
"Keep responses short, concise, and direct; don't summarize what you just did.",
|
|
107
|
-
|
|
108
|
+
(
|
|
109
|
+
"Prioritize accuracy over agreement — investigate before confirming, and "
|
|
110
|
+
"disagree when the evidence calls for it."
|
|
111
|
+
),
|
|
108
112
|
]
|
|
109
113
|
|
|
110
114
|
|
|
@@ -231,7 +235,9 @@ class PromptBuilder:
|
|
|
231
235
|
append = self._append()
|
|
232
236
|
git = self._git_section()
|
|
233
237
|
footer = self._footer()
|
|
234
|
-
return
|
|
238
|
+
return (
|
|
239
|
+
identity + guidelines + tools + docs + project_context + skills + append + git + footer
|
|
240
|
+
)
|
|
235
241
|
|
|
236
242
|
# ------------------------------------------------------------------
|
|
237
243
|
# Layers
|
|
@@ -267,7 +273,10 @@ class PromptBuilder:
|
|
|
267
273
|
if guideline:
|
|
268
274
|
guidelines.append(f"- **{t.name}**: {guideline.strip()}")
|
|
269
275
|
section = "\n\n# Available Tools\n\n" + "\n".join(lines)
|
|
270
|
-
section+=
|
|
276
|
+
section += (
|
|
277
|
+
"\nIn addition to the tools above, you may have access to other custom "
|
|
278
|
+
"tools depending on the project."
|
|
279
|
+
)
|
|
271
280
|
if guidelines:
|
|
272
281
|
section += "\n\n## Tool Guidelines\n\n" + "\n".join(guidelines)
|
|
273
282
|
return section
|
|
@@ -297,9 +306,7 @@ class PromptBuilder:
|
|
|
297
306
|
return (
|
|
298
307
|
"\n\n# Project Instructions\n\n"
|
|
299
308
|
"Project-specific guidelines (follow before general Tau guidelines):\n\n"
|
|
300
|
-
"<project_context>\n\n"
|
|
301
|
-
+ blocks
|
|
302
|
-
+ "</project_context>"
|
|
309
|
+
"<project_context>\n\n" + blocks + "</project_context>"
|
|
303
310
|
)
|
|
304
311
|
|
|
305
312
|
def _docs_section(self) -> str:
|