tau-coding-agent 0.4.5__tar.gz → 0.4.6__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.
Files changed (358) hide show
  1. {tau_coding_agent-0.4.5/tau_coding_agent.egg-info → tau_coding_agent-0.4.6}/PKG-INFO +1 -1
  2. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/docs/architecture.md +33 -2
  3. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/docs/extensions.md +48 -2
  4. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/docs/project-structure.md +19 -6
  5. tau_coding_agent-0.4.6/docs/python-api.md +501 -0
  6. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/docs/usage.md +6 -0
  7. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/pyproject.toml +1 -1
  8. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/agent/prompt/builder.py +25 -4
  9. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/agent/prompt/types.py +4 -0
  10. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/commands/types.py +6 -0
  11. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/console/cli.py +1 -1
  12. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/extensions/__init__.py +6 -2
  13. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/extensions/api.py +19 -4
  14. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/extensions/context.py +46 -2
  15. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/extensions/loader.py +43 -0
  16. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/extensions/runtime.py +14 -0
  17. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/inference/api/text/service.py +14 -0
  18. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/modes/interactive/app.py +5 -8
  19. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/modes/interactive/input_handler.py +16 -10
  20. tau_coding_agent-0.4.6/tau/resources/__init__.py +18 -0
  21. tau_coding_agent-0.4.6/tau/resources/loader.py +480 -0
  22. tau_coding_agent-0.4.6/tau/resources/types.py +57 -0
  23. tau_coding_agent-0.4.6/tau/runtime/dependencies.py +58 -0
  24. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/runtime/service.py +253 -72
  25. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/runtime/types.py +189 -140
  26. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/themes/registry.py +15 -0
  27. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6/tau_coding_agent.egg-info}/PKG-INFO +1 -1
  28. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau_coding_agent.egg-info/SOURCES.txt +8 -0
  29. tau_coding_agent-0.4.6/tests/test_command_execution_policy.py +55 -0
  30. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tests/test_command_registry.py +1 -0
  31. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tests/test_extension_api.py +89 -0
  32. tau_coding_agent-0.4.6/tests/test_extension_lifecycle.py +234 -0
  33. tau_coding_agent-0.4.6/tests/test_resource_loader.py +334 -0
  34. tau_coding_agent-0.4.6/tests/test_runtime_sdk.py +286 -0
  35. tau_coding_agent-0.4.5/docs/python-api.md +0 -274
  36. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/LICENSE +0 -0
  37. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/MANIFEST.in +0 -0
  38. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/README.md +0 -0
  39. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/docs/IMPLEMENTATION_SUMMARY.md +0 -0
  40. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/docs/auth.md +0 -0
  41. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/docs/cli-reference.md +0 -0
  42. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/docs/development.md +0 -0
  43. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/docs/docs.json +0 -0
  44. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/docs/extension-settings.md +0 -0
  45. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/docs/http-proxy.md +0 -0
  46. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/docs/index.md +0 -0
  47. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/docs/inference-providers.md +0 -0
  48. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/docs/installation.md +0 -0
  49. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/docs/keybindings.md +0 -0
  50. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/docs/messages.md +0 -0
  51. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/docs/project-context.md +0 -0
  52. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/docs/prompts.md +0 -0
  53. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/docs/quickstart.md +0 -0
  54. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/docs/sessions.md +0 -0
  55. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/docs/settings.md +0 -0
  56. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/docs/skills.md +0 -0
  57. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/docs/themes.md +0 -0
  58. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/docs/tools.md +0 -0
  59. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/setup.cfg +0 -0
  60. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/__init__.py +0 -0
  61. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/agent/__init__.py +0 -0
  62. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/agent/prompt/__init__.py +0 -0
  63. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/agent/service.py +0 -0
  64. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/agent/types.py +0 -0
  65. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/auth/manager.py +0 -0
  66. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/auth/storage.py +0 -0
  67. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/auth/types.py +0 -0
  68. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/builtins/__init__.py +0 -0
  69. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/builtins/commands/__init__.py +0 -0
  70. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/builtins/commands/clear.py +0 -0
  71. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/builtins/commands/compact.py +0 -0
  72. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/builtins/commands/reload.py +0 -0
  73. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/builtins/commands/session.py +0 -0
  74. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/builtins/extensions/footer/__init__.py +0 -0
  75. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/builtins/extensions/footer/git.py +0 -0
  76. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/builtins/extensions/footer/model.py +0 -0
  77. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/builtins/extensions/footer/utils.py +0 -0
  78. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/builtins/extensions/header/__init__.py +0 -0
  79. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/builtins/models/__init__.py +0 -0
  80. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/builtins/models/audio.py +0 -0
  81. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/builtins/models/image.py +0 -0
  82. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/builtins/models/text.py +0 -0
  83. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/builtins/models/video.py +0 -0
  84. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/builtins/prompts/commit.md +0 -0
  85. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/builtins/prompts/docs.md +0 -0
  86. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/builtins/prompts/explain.md +0 -0
  87. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/builtins/prompts/fix.md +0 -0
  88. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/builtins/prompts/refactor.md +0 -0
  89. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/builtins/prompts/review.md +0 -0
  90. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/builtins/prompts/test.md +0 -0
  91. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/builtins/providers/__init__.py +0 -0
  92. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/builtins/providers/audio.py +0 -0
  93. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/builtins/providers/image.py +0 -0
  94. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/builtins/providers/text.py +0 -0
  95. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/builtins/providers/video.py +0 -0
  96. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/builtins/skills/code-review/SKILL.md +0 -0
  97. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/builtins/skills/debug/SKILL.md +0 -0
  98. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/builtins/skills/git-commit/SKILL.md +0 -0
  99. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/builtins/themes/dark.yaml +0 -0
  100. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/builtins/themes/light.yaml +0 -0
  101. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/builtins/tools/__init__.py +0 -0
  102. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/builtins/tools/edit.py +0 -0
  103. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/builtins/tools/glob.py +0 -0
  104. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/builtins/tools/grep.py +0 -0
  105. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/builtins/tools/ls.py +0 -0
  106. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/builtins/tools/read.py +0 -0
  107. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/builtins/tools/terminal.py +0 -0
  108. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/builtins/tools/utils.py +0 -0
  109. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/builtins/tools/write.py +0 -0
  110. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/commands/__init__.py +0 -0
  111. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/commands/registry.py +0 -0
  112. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/console/__init__.py +0 -0
  113. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/console/commands/__init__.py +0 -0
  114. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/console/commands/auth.py +0 -0
  115. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/console/commands/packages.py +0 -0
  116. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/console/commands/update.py +0 -0
  117. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/core/__init__.py +0 -0
  118. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/core/registry.py +0 -0
  119. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/engine/__init__.py +0 -0
  120. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/engine/service.py +0 -0
  121. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/engine/types.py +0 -0
  122. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/extensions/settings.py +0 -0
  123. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/hooks/__init__.py +0 -0
  124. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/hooks/engine.py +0 -0
  125. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/hooks/inference.py +0 -0
  126. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/hooks/runtime.py +0 -0
  127. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/hooks/service.py +0 -0
  128. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/hooks/session.py +0 -0
  129. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/hooks/tui.py +0 -0
  130. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/hooks/types.py +0 -0
  131. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/inference/__init__.py +0 -0
  132. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/inference/api/__init__.py +0 -0
  133. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/inference/api/audio/__init__.py +0 -0
  134. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/inference/api/audio/base.py +0 -0
  135. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/inference/api/audio/builtins.py +0 -0
  136. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/inference/api/audio/elevenlabs_audio.py +0 -0
  137. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/inference/api/audio/gemini_audio.py +0 -0
  138. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/inference/api/audio/openai_audio.py +0 -0
  139. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/inference/api/audio/registry.py +0 -0
  140. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/inference/api/audio/sarvam_audio.py +0 -0
  141. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/inference/api/audio/service.py +0 -0
  142. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/inference/api/audio/utils.py +0 -0
  143. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/inference/api/availability.py +0 -0
  144. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/inference/api/image/__init__.py +0 -0
  145. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/inference/api/image/base.py +0 -0
  146. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/inference/api/image/builtins.py +0 -0
  147. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/inference/api/image/gemini_image.py +0 -0
  148. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/inference/api/image/openai_image.py +0 -0
  149. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/inference/api/image/openrouter.py +0 -0
  150. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/inference/api/image/registry.py +0 -0
  151. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/inference/api/image/service.py +0 -0
  152. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/inference/api/registry.py +0 -0
  153. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/inference/api/text/__init__.py +0 -0
  154. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/inference/api/text/anthropic_claude_code.py +0 -0
  155. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/inference/api/text/anthropic_messages.py +0 -0
  156. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/inference/api/text/anthropic_vertex.py +0 -0
  157. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/inference/api/text/base.py +0 -0
  158. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/inference/api/text/builtins.py +0 -0
  159. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/inference/api/text/gemini_generate.py +0 -0
  160. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/inference/api/text/github_copilot_chat.py +0 -0
  161. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/inference/api/text/google_antigravity.py +0 -0
  162. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/inference/api/text/google_vertex.py +0 -0
  163. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/inference/api/text/mistral_chat.py +0 -0
  164. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/inference/api/text/ollama_chat.py +0 -0
  165. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/inference/api/text/openai_codex_responses.py +0 -0
  166. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/inference/api/text/openai_completions.py +0 -0
  167. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/inference/api/text/openai_responses.py +0 -0
  168. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/inference/api/text/openai_vertex.py +0 -0
  169. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/inference/api/text/registry.py +0 -0
  170. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/inference/api/text/types.py +0 -0
  171. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/inference/api/text/utils.py +0 -0
  172. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/inference/api/video/__init__.py +0 -0
  173. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/inference/api/video/base.py +0 -0
  174. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/inference/api/video/builtins.py +0 -0
  175. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/inference/api/video/fal_video.py +0 -0
  176. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/inference/api/video/openrouter_video.py +0 -0
  177. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/inference/api/video/registry.py +0 -0
  178. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/inference/api/video/service.py +0 -0
  179. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/inference/model/__init__.py +0 -0
  180. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/inference/model/registry.py +0 -0
  181. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/inference/model/types.py +0 -0
  182. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/inference/provider/__init__.py +0 -0
  183. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/inference/provider/oauth/__init__.py +0 -0
  184. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/inference/provider/oauth/anthropic_claude_code.py +0 -0
  185. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/inference/provider/oauth/github_copilot.py +0 -0
  186. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/inference/provider/oauth/google_antigravity.py +0 -0
  187. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/inference/provider/oauth/openai_codex.py +0 -0
  188. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/inference/provider/oauth/pkce.py +0 -0
  189. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/inference/provider/oauth/types.py +0 -0
  190. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/inference/provider/oauth/utils.py +0 -0
  191. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/inference/provider/registry.py +0 -0
  192. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/inference/provider/types.py +0 -0
  193. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/inference/types.py +0 -0
  194. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/inference/utils.py +0 -0
  195. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/message/__init__.py +0 -0
  196. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/message/types.py +0 -0
  197. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/message/utils.py +0 -0
  198. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/modes/__init__.py +0 -0
  199. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/modes/interactive/__init__.py +0 -0
  200. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/modes/interactive/agent_hooks.py +0 -0
  201. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/modes/interactive/commands/__init__.py +0 -0
  202. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/modes/interactive/commands/appearance.py +0 -0
  203. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/modes/interactive/commands/auth.py +0 -0
  204. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/modes/interactive/commands/context.py +0 -0
  205. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/modes/interactive/commands/extensions.py +0 -0
  206. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/modes/interactive/commands/misc.py +0 -0
  207. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/modes/interactive/commands/model.py +0 -0
  208. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/modes/interactive/commands/session.py +0 -0
  209. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/modes/interactive/components/__init__.py +0 -0
  210. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/modes/interactive/components/command_palette.py +0 -0
  211. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/modes/interactive/components/config_selector.py +0 -0
  212. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/modes/interactive/components/extension_selector.py +0 -0
  213. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/modes/interactive/components/file_picker.py +0 -0
  214. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/modes/interactive/components/layout.py +0 -0
  215. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/modes/interactive/components/message_list.py +0 -0
  216. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/modes/interactive/components/model_selector.py +0 -0
  217. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/modes/interactive/components/oauth_selector.py +0 -0
  218. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/modes/interactive/components/overlays.py +0 -0
  219. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/modes/interactive/components/selector_controller.py +0 -0
  220. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/modes/interactive/components/session_selector.py +0 -0
  221. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/modes/interactive/components/settings_selector.py +0 -0
  222. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/modes/interactive/components/theme_selector.py +0 -0
  223. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/modes/interactive/components/thinking_selector.py +0 -0
  224. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/modes/interactive/components/tree_selector.py +0 -0
  225. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/modes/interactive/components/trust_screen.py +0 -0
  226. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/modes/print/__init__.py +0 -0
  227. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/modes/rpc/__init__.py +0 -0
  228. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/modes/rpc/mode.py +0 -0
  229. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/modes/rpc/types.py +0 -0
  230. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/packages/__init__.py +0 -0
  231. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/packages/manager.py +0 -0
  232. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/packages/types.py +0 -0
  233. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/packages/utils.py +0 -0
  234. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/prompts/expand.py +0 -0
  235. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/prompts/loader.py +0 -0
  236. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/prompts/registry.py +0 -0
  237. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/prompts/types.py +0 -0
  238. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/session/branch_summarization.py +0 -0
  239. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/session/compaction.py +0 -0
  240. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/session/manager.py +0 -0
  241. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/session/types.py +0 -0
  242. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/session/utils.py +0 -0
  243. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/settings/manager.py +0 -0
  244. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/settings/paths.py +0 -0
  245. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/settings/storage.py +0 -0
  246. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/settings/types.py +0 -0
  247. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/settings/utils.py +0 -0
  248. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/skills/loader.py +0 -0
  249. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/skills/registry.py +0 -0
  250. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/skills/types.py +0 -0
  251. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/themes/loader.py +0 -0
  252. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/themes/types.py +0 -0
  253. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/tool/__init__.py +0 -0
  254. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/tool/registry.py +0 -0
  255. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/tool/render.py +0 -0
  256. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/tool/types.py +0 -0
  257. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/trust/__init__.py +0 -0
  258. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/trust/manager.py +0 -0
  259. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/trust/types.py +0 -0
  260. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/trust/utils.py +0 -0
  261. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/tui/__init__.py +0 -0
  262. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/tui/autocomplete.py +0 -0
  263. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/tui/component.py +0 -0
  264. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/tui/components/__init__.py +0 -0
  265. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/tui/components/box.py +0 -0
  266. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/tui/components/editor.py +0 -0
  267. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/tui/components/image.py +0 -0
  268. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/tui/components/select_list.py +0 -0
  269. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/tui/components/spinner.py +0 -0
  270. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/tui/components/text_input.py +0 -0
  271. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/tui/input.py +0 -0
  272. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/tui/keybinding_hints.py +0 -0
  273. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/tui/markdown.py +0 -0
  274. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/tui/terminal.py +0 -0
  275. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/tui/theme.py +0 -0
  276. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/tui/tui.py +0 -0
  277. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/tui/ui_context.py +0 -0
  278. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/tui/utils.py +0 -0
  279. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/utils/__init__.py +0 -0
  280. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/utils/http_proxy.py +0 -0
  281. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/utils/image_processing.py +0 -0
  282. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/utils/secrets.py +0 -0
  283. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau/utils/version_check.py +0 -0
  284. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau_coding_agent.egg-info/dependency_links.txt +0 -0
  285. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau_coding_agent.egg-info/entry_points.txt +0 -0
  286. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau_coding_agent.egg-info/requires.txt +0 -0
  287. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tau_coding_agent.egg-info/top_level.txt +0 -0
  288. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tests/test_agent_compaction.py +0 -0
  289. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tests/test_agent_prompt.py +0 -0
  290. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tests/test_agent_types.py +0 -0
  291. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tests/test_ansi.py +0 -0
  292. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tests/test_auth_command.py +0 -0
  293. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tests/test_auth_manager.py +0 -0
  294. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tests/test_auth_storage.py +0 -0
  295. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tests/test_branch_navigation.py +0 -0
  296. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tests/test_branch_summarization.py +0 -0
  297. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tests/test_builtin_tools.py +0 -0
  298. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tests/test_cli_inputs.py +0 -0
  299. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tests/test_compaction.py +0 -0
  300. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tests/test_diff.py +0 -0
  301. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tests/test_editor_protocol.py +0 -0
  302. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tests/test_engine_execution.py +0 -0
  303. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tests/test_engine_steering.py +0 -0
  304. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tests/test_engine_types.py +0 -0
  305. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tests/test_footer_model.py +0 -0
  306. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tests/test_footer_utils.py +0 -0
  307. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tests/test_fuzzy.py +0 -0
  308. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tests/test_http_proxy.py +0 -0
  309. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tests/test_image_processing.py +0 -0
  310. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tests/test_inference_api_text_utils.py +0 -0
  311. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tests/test_inference_error_utils.py +0 -0
  312. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tests/test_inference_types.py +0 -0
  313. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tests/test_inference_utils.py +0 -0
  314. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tests/test_keybindings.py +0 -0
  315. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tests/test_markdown.py +0 -0
  316. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tests/test_message_types.py +0 -0
  317. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tests/test_message_utils.py +0 -0
  318. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tests/test_model_availability.py +0 -0
  319. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tests/test_model_registry.py +0 -0
  320. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tests/test_model_selector_modal.py +0 -0
  321. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tests/test_model_types.py +0 -0
  322. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tests/test_oauth_utils.py +0 -0
  323. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tests/test_package_resources.py +0 -0
  324. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tests/test_packages_utils.py +0 -0
  325. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tests/test_pkce.py +0 -0
  326. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tests/test_prompts_expand.py +0 -0
  327. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tests/test_prompts_loader.py +0 -0
  328. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tests/test_prompts_registry.py +0 -0
  329. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tests/test_provider_registry.py +0 -0
  330. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tests/test_rpc_mode.py +0 -0
  331. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tests/test_secrets.py +0 -0
  332. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tests/test_selector_controller.py +0 -0
  333. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tests/test_session_manager.py +0 -0
  334. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tests/test_session_trust_persist.py +0 -0
  335. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tests/test_session_types.py +0 -0
  336. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tests/test_session_utils.py +0 -0
  337. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tests/test_settings_manager.py +0 -0
  338. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tests/test_settings_paths.py +0 -0
  339. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tests/test_settings_storage.py +0 -0
  340. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tests/test_settings_utils.py +0 -0
  341. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tests/test_skills_loader.py +0 -0
  342. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tests/test_skills_registry.py +0 -0
  343. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tests/test_text_input.py +0 -0
  344. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tests/test_text_llm_invoke.py +0 -0
  345. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tests/test_theme_loader.py +0 -0
  346. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tests/test_themes_registry.py +0 -0
  347. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tests/test_thinking_render.py +0 -0
  348. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tests/test_tool_registry.py +0 -0
  349. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tests/test_tool_render.py +0 -0
  350. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tests/test_trust_manager.py +0 -0
  351. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tests/test_trust_utils.py +0 -0
  352. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tests/test_tui_capabilities.py +0 -0
  353. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tests/test_tui_input.py +0 -0
  354. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tests/test_tui_layout_sizing.py +0 -0
  355. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tests/test_tui_theme.py +0 -0
  356. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tests/test_tui_utils.py +0 -0
  357. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tests/test_ui_context.py +0 -0
  358. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.6}/tests/test_version_check.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tau-coding-agent
3
- Version: 0.4.5
3
+ Version: 0.4.6
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
@@ -70,6 +70,7 @@ User input flows through these stages:
70
70
  |--------|---------|
71
71
  | `session/` | Session JSONL persistence, compaction, branching |
72
72
  | `settings/` | Configuration from JSON files |
73
+ | `resources/` | Unified discovery of extensions, skills, prompts, and themes |
73
74
  | `auth/` | Credential storage and resolution |
74
75
  | `message/` | Message type definitions |
75
76
  | `trust/` | Trust and permission checks |
@@ -97,7 +98,7 @@ User input flows through these stages:
97
98
 
98
99
  | Module | Purpose |
99
100
  |--------|---------|
100
- | `packages/` | Package/dependency management (reserved) |
101
+ | `packages/` | Installed package and dependency management |
101
102
  | `rpc/` | JSON-RPC protocol for IDE integration |
102
103
 
103
104
  ## Agent Execution State Machine
@@ -141,6 +142,11 @@ TUI overlays participate in focus lifecycle. Hiding or closing a capturing
141
142
  overlay restores the next visible overlay or its previous focus target.
142
143
  Components exposing `dispose()` are disposed when their overlay closes.
143
144
 
145
+ Slash commands declare whether they require an idle agent. Idle-only commands
146
+ are deferred until the current turn settles; UI-only and read-only commands may
147
+ opt into immediate dispatch during a turn. Normal Enter input remains steering,
148
+ and Alt+Enter remains a post-turn follow-up message.
149
+
144
150
  ## Message Types and Context
145
151
 
146
152
  Messages in sessions are typed:
@@ -211,12 +217,37 @@ Tools are executed in a sandboxed environment:
211
217
  6. Result is serialized and added to context
212
218
  ```
213
219
 
214
- Built-in tools (bash, read, write, edit, glob, grep, ls) are always available. Custom tools are registered via extensions.
220
+ Built-in tools (bash, read, write, edit, glob, grep, ls) are enabled by default.
221
+ `RuntimeConfig` can allow or exclude tools by name. Custom tools are registered
222
+ via extensions or passed directly to the runtime.
223
+
224
+ Programmatic runtimes can replace constructed services through
225
+ `RuntimeDependencies`. Typed factories cover settings, LLM/model/auth wiring,
226
+ session storage, hooks, and the tool registry. Session-bound factories run
227
+ again when the active session is replaced.
228
+
229
+ `Runtime.create_with_result()` returns the initialized runtime together with
230
+ resource diagnostics, extension errors, and requested-versus-selected
231
+ model/provider resolution. `Runtime.create()` remains the convenience API when
232
+ the caller does not need startup details.
233
+
234
+ Extension reloads pass through a serialized coordinator. Callback-triggered or
235
+ mid-turn requests wait until extension dispatch and the agent lifecycle settle.
236
+ Runtime generations invalidate contexts captured before reload, session
237
+ replacement, or shutdown, and shutdown detaches the extension runtime from its
238
+ hook bus.
215
239
 
216
240
  ## Extension Points
217
241
 
218
242
  Tau is designed to be extended without modifying core code. Key extension points via the `tau` parameter in `register()`:
219
243
 
244
+ Resource discovery is centralized behind the replaceable `ResourceLoader`
245
+ protocol. `DefaultResourceLoader` supports per-resource overrides. Startup and
246
+ `/reload` consume one `ResourceSnapshot`, keeping extensions, skills, prompts,
247
+ themes, context files, and structured diagnostics consistent. Diagnostics
248
+ identify invalid configured paths, package manifests/resources, hook paths, and
249
+ context read failures without preventing valid resources from loading.
250
+
220
251
  ### Tools
221
252
 
222
253
  Register custom tools that the agent can call:
@@ -89,6 +89,34 @@ def register(tau):
89
89
  pass
90
90
  ```
91
91
 
92
+ ### Inline extension factories
93
+
94
+ Python API users can supply the same registration function directly through
95
+ `RuntimeConfig`, without creating or installing an extension file:
96
+
97
+ ```python
98
+ from tau.extensions import ExtensionAPI
99
+ from tau.runtime.types import RuntimeConfig
100
+
101
+ def configure(tau: ExtensionAPI) -> None:
102
+ tau.register_tool(MyTool())
103
+ tau.append_prompt("Use the embedding application's workflow.")
104
+
105
+ config = RuntimeConfig(
106
+ cwd=Path.cwd(),
107
+ extension_factories=[configure],
108
+ )
109
+ ```
110
+
111
+ Inline factories receive the normal `ExtensionAPI`, can be synchronous or
112
+ asynchronous, and load after file-based extensions. They participate in the
113
+ same tool, command, hook, provider, service, prompt, theme, and UI registration
114
+ systems. Factory failures are isolated and reported as `ExtensionError`.
115
+
116
+ `/reload` unloads the old inline extensions and executes the factories again,
117
+ preventing duplicate hook subscriptions. Session replacement reuses the active
118
+ extension runtime and does not rerun factories.
119
+
92
120
  `register` may be `async` if setup requires awaiting:
93
121
 
94
122
  ```python
@@ -786,7 +814,7 @@ def register(tau):
786
814
  | Method | Description |
787
815
  |--------|-------------|
788
816
  | `tau.register_tool(tool)` | Add a tool the agent can call |
789
- | `tau.register_command(name, desc, handler, aliases=[], get_argument_completions=None)` | Add a `/name` slash command with optional argument tab-completion |
817
+ | `tau.register_command(name, desc, handler, aliases=[], get_argument_completions=None, argument_hint=None, requires_idle=True)` | Add a `/name` slash command; set `requires_idle=False` only for UI-only or read-only handlers safe during an active turn |
790
818
  | `tau.on(event, handler)` / `@tau.on(event)` | Subscribe to a lifecycle event |
791
819
  | `tau.register_shortcut(key, desc, handler)` | Bind a keyboard shortcut |
792
820
  | `tau.append_prompt(text)` | Append text to the system prompt |
@@ -1423,6 +1451,18 @@ async def on_start(event, ctx):
1423
1451
  `/reload` re-discovers and hot-reloads all extensions, skills, prompts, and
1424
1452
  settings without restarting the session.
1425
1453
 
1454
+ Reload requests are serialized. A request made from an extension callback or
1455
+ while the agent is processing is queued until the callback pipeline and complete
1456
+ agent lifecycle settle. Multiple queued requests are coalesced. Consequently,
1457
+ `await ctx.reload()` acknowledges a request but does not guarantee that a
1458
+ deferred reload has already completed.
1459
+
1460
+ Contexts are generation-bound. An `ExtensionContext` captured before `/reload`,
1461
+ `/new`, `/resume`, `/clone`, or runtime shutdown raises
1462
+ `StaleExtensionContextError` when reused. Do not retain contexts in long-lived
1463
+ background tasks; capture immutable values or acquire a fresh context from a
1464
+ new callback.
1465
+
1426
1466
  **What gets picked up:**
1427
1467
  - New or modified extension files
1428
1468
  - New or modified skill and prompt template files
@@ -1432,10 +1472,16 @@ settings without restarting the session.
1432
1472
  **What persists across reload:**
1433
1473
  - The current session (messages, branching state)
1434
1474
  - Auth credentials
1435
- - Any runtime state your extension stored outside its module (e.g. in a global variable — module globals are re-created on reload)
1475
+ - Normally imported third-party Python modules, which remain cached in `sys.modules`
1476
+ - External state not explicitly released by the extension
1436
1477
 
1437
1478
  **What resets:**
1438
1479
  - All registered tools, commands, shortcuts, and event handlers — re-registered from scratch
1439
1480
  - The system prompt — rebuilt from SYSTEM.md and all `append_prompt` calls
1481
+ - Extension entry-module globals and inline factory state
1482
+
1483
+ Tau emits `extension_unload` before replacing an extension runtime and
1484
+ `runtime_stop` before shutdown. Use those events to release subprocesses,
1485
+ background tasks, sockets, and registrations outside Tau.
1440
1486
 
1441
1487
  After reload, new tools are available to the model immediately in the next turn.
@@ -1,11 +1,11 @@
1
1
  # Project Structure
2
2
 
3
- Tau consists of 205 Python modules organized into 22 main packages. This page documents the codebase organization and provides module-by-module reference for contributors and agents.
3
+ Tau consists of 230 Python modules organized into 25 main packages. This page documents the codebase organization and provides module-by-module reference for contributors and agents.
4
4
 
5
5
  ## Directory Structure
6
6
 
7
7
  ```
8
- tau/ # Main package (205 modules)
8
+ tau/ # Main package (230 modules)
9
9
  ├── __init__.py
10
10
  ├── content_registry.py # Content registry abstractions
11
11
  ├── agent/ # Agent execution service
@@ -31,6 +31,7 @@ tau/ # Main package (205 modules)
31
31
  ├── message/ # Message types and utilities
32
32
  ├── packages/ # Package/dependency management
33
33
  ├── prompts/ # Prompt template system
34
+ ├── resources/ # Unified runtime resource discovery
34
35
  ├── rpc/ # JSON-RPC protocol for IDE integration
35
36
  ├── runtime/ # Agent runtime service
36
37
  ├── session/ # Session management and persistence
@@ -154,12 +155,22 @@ Message data structures and utilities.
154
155
 
155
156
  ### `packages/` - Package Management
156
157
 
157
- Package/dependency resolution (reserved for future use).
158
+ Installed package and dependency management.
158
159
 
159
160
  - `manager.py` - Package management
160
161
  - `types.py` - Package types
161
162
  - `utils.py` - Package utilities
162
163
 
164
+ ### `resources/` - Resource Discovery
165
+
166
+ The replaceable loader builds one immutable snapshot from built-in, global,
167
+ project, installed-package, hook-provided, and context-file resources. It
168
+ supports focused overrides and structured diagnostics. Runtime startup and
169
+ `/reload` both consume it.
170
+
171
+ - `loader.py` - Resource loader protocol, default discovery, and registry application
172
+ - `types.py` - `ResourceContext`, immutable `ResourceSnapshot`, context files, and diagnostics
173
+
163
174
  ### `prompts/` - Prompt Template System
164
175
 
165
176
  Prompt loading and variable substitution.
@@ -178,10 +189,12 @@ JSON-RPC server for IDE integration.
178
189
 
179
190
  ### `runtime/` - Agent Runtime
180
191
 
181
- Wires together agent, session, engine, and extensions.
192
+ Wires together agent, session, engine, and extensions with replaceable service
193
+ factories for programmatic embedding.
182
194
 
195
+ - `dependencies.py` - Typed dependency factories and creation contexts
183
196
  - `service.py` - Main runtime orchestration
184
- - `types.py` - Runtime state types
197
+ - `types.py` - Runtime state, configuration, and structured startup result types
185
198
 
186
199
  ### `session/` - Session Management
187
200
 
@@ -400,7 +413,7 @@ See [Extensions Guide](extensions.md) for detailed examples.
400
413
  ## Code Statistics
401
414
 
402
415
  - **Total modules**: 205 Python files
403
- - **Main package**: tau/ (22 subpackages)
416
+ - **Main package**: tau/ (25 subpackages)
404
417
  - **Test coverage**: tests/ directory
405
418
  - **Lines of code**: ~8,000 LOC (excluding tests and docs)
406
419
  - **Type hints**: Full type coverage with mypy/pyright