fast-agent-mcp 0.2.58__py3-none-any.whl → 0.3.1__py3-none-any.whl

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.

Potentially problematic release.


This version of fast-agent-mcp might be problematic. Click here for more details.

Files changed (234) hide show
  1. fast_agent/__init__.py +127 -0
  2. fast_agent/agents/__init__.py +36 -0
  3. {mcp_agent/core → fast_agent/agents}/agent_types.py +2 -1
  4. fast_agent/agents/llm_agent.py +217 -0
  5. fast_agent/agents/llm_decorator.py +486 -0
  6. mcp_agent/agents/base_agent.py → fast_agent/agents/mcp_agent.py +377 -385
  7. fast_agent/agents/tool_agent.py +168 -0
  8. {mcp_agent → fast_agent}/agents/workflow/chain_agent.py +43 -33
  9. {mcp_agent → fast_agent}/agents/workflow/evaluator_optimizer.py +31 -35
  10. {mcp_agent → fast_agent}/agents/workflow/iterative_planner.py +56 -47
  11. {mcp_agent → fast_agent}/agents/workflow/orchestrator_models.py +4 -4
  12. {mcp_agent → fast_agent}/agents/workflow/parallel_agent.py +34 -41
  13. {mcp_agent → fast_agent}/agents/workflow/router_agent.py +54 -39
  14. {mcp_agent → fast_agent}/cli/__main__.py +5 -3
  15. {mcp_agent → fast_agent}/cli/commands/check_config.py +95 -66
  16. {mcp_agent → fast_agent}/cli/commands/go.py +20 -11
  17. {mcp_agent → fast_agent}/cli/commands/quickstart.py +4 -4
  18. {mcp_agent → fast_agent}/cli/commands/server_helpers.py +1 -1
  19. {mcp_agent → fast_agent}/cli/commands/setup.py +75 -134
  20. {mcp_agent → fast_agent}/cli/commands/url_parser.py +9 -8
  21. {mcp_agent → fast_agent}/cli/main.py +36 -16
  22. {mcp_agent → fast_agent}/cli/terminal.py +2 -2
  23. {mcp_agent → fast_agent}/config.py +10 -2
  24. fast_agent/constants.py +8 -0
  25. {mcp_agent → fast_agent}/context.py +24 -19
  26. {mcp_agent → fast_agent}/context_dependent.py +9 -5
  27. fast_agent/core/__init__.py +52 -0
  28. {mcp_agent → fast_agent}/core/agent_app.py +39 -36
  29. fast_agent/core/core_app.py +135 -0
  30. {mcp_agent → fast_agent}/core/direct_decorators.py +12 -26
  31. {mcp_agent → fast_agent}/core/direct_factory.py +95 -73
  32. {mcp_agent → fast_agent/core}/executor/executor.py +4 -5
  33. {mcp_agent → fast_agent}/core/fastagent.py +32 -32
  34. fast_agent/core/logging/__init__.py +5 -0
  35. {mcp_agent → fast_agent/core}/logging/events.py +3 -3
  36. {mcp_agent → fast_agent/core}/logging/json_serializer.py +1 -1
  37. {mcp_agent → fast_agent/core}/logging/listeners.py +85 -7
  38. {mcp_agent → fast_agent/core}/logging/logger.py +7 -7
  39. {mcp_agent → fast_agent/core}/logging/transport.py +10 -11
  40. fast_agent/core/prompt.py +9 -0
  41. {mcp_agent → fast_agent}/core/validation.py +4 -4
  42. fast_agent/event_progress.py +61 -0
  43. fast_agent/history/history_exporter.py +44 -0
  44. {mcp_agent → fast_agent}/human_input/__init__.py +9 -12
  45. {mcp_agent → fast_agent}/human_input/elicitation_handler.py +26 -8
  46. {mcp_agent → fast_agent}/human_input/elicitation_state.py +7 -7
  47. {mcp_agent → fast_agent}/human_input/simple_form.py +6 -4
  48. {mcp_agent → fast_agent}/human_input/types.py +1 -18
  49. fast_agent/interfaces.py +228 -0
  50. fast_agent/llm/__init__.py +9 -0
  51. mcp_agent/llm/augmented_llm.py → fast_agent/llm/fastagent_llm.py +127 -218
  52. fast_agent/llm/internal/passthrough.py +137 -0
  53. mcp_agent/llm/augmented_llm_playback.py → fast_agent/llm/internal/playback.py +29 -25
  54. mcp_agent/llm/augmented_llm_silent.py → fast_agent/llm/internal/silent.py +10 -17
  55. fast_agent/llm/internal/slow.py +38 -0
  56. {mcp_agent → fast_agent}/llm/memory.py +40 -30
  57. {mcp_agent → fast_agent}/llm/model_database.py +35 -2
  58. {mcp_agent → fast_agent}/llm/model_factory.py +103 -77
  59. fast_agent/llm/model_info.py +126 -0
  60. {mcp_agent/llm/providers → fast_agent/llm/provider/anthropic}/anthropic_utils.py +7 -7
  61. fast_agent/llm/provider/anthropic/llm_anthropic.py +603 -0
  62. {mcp_agent/llm/providers → fast_agent/llm/provider/anthropic}/multipart_converter_anthropic.py +79 -86
  63. {mcp_agent/llm/providers → fast_agent/llm/provider/bedrock}/bedrock_utils.py +3 -1
  64. mcp_agent/llm/providers/augmented_llm_bedrock.py → fast_agent/llm/provider/bedrock/llm_bedrock.py +833 -717
  65. {mcp_agent/llm/providers → fast_agent/llm/provider/google}/google_converter.py +66 -14
  66. fast_agent/llm/provider/google/llm_google_native.py +431 -0
  67. mcp_agent/llm/providers/augmented_llm_aliyun.py → fast_agent/llm/provider/openai/llm_aliyun.py +6 -7
  68. mcp_agent/llm/providers/augmented_llm_azure.py → fast_agent/llm/provider/openai/llm_azure.py +4 -4
  69. mcp_agent/llm/providers/augmented_llm_deepseek.py → fast_agent/llm/provider/openai/llm_deepseek.py +10 -11
  70. mcp_agent/llm/providers/augmented_llm_generic.py → fast_agent/llm/provider/openai/llm_generic.py +4 -4
  71. mcp_agent/llm/providers/augmented_llm_google_oai.py → fast_agent/llm/provider/openai/llm_google_oai.py +4 -4
  72. mcp_agent/llm/providers/augmented_llm_groq.py → fast_agent/llm/provider/openai/llm_groq.py +14 -16
  73. mcp_agent/llm/providers/augmented_llm_openai.py → fast_agent/llm/provider/openai/llm_openai.py +133 -207
  74. mcp_agent/llm/providers/augmented_llm_openrouter.py → fast_agent/llm/provider/openai/llm_openrouter.py +6 -6
  75. mcp_agent/llm/providers/augmented_llm_tensorzero_openai.py → fast_agent/llm/provider/openai/llm_tensorzero_openai.py +17 -16
  76. mcp_agent/llm/providers/augmented_llm_xai.py → fast_agent/llm/provider/openai/llm_xai.py +6 -6
  77. {mcp_agent/llm/providers → fast_agent/llm/provider/openai}/multipart_converter_openai.py +125 -63
  78. {mcp_agent/llm/providers → fast_agent/llm/provider/openai}/openai_multipart.py +12 -12
  79. {mcp_agent/llm/providers → fast_agent/llm/provider/openai}/openai_utils.py +18 -16
  80. {mcp_agent → fast_agent}/llm/provider_key_manager.py +2 -2
  81. {mcp_agent → fast_agent}/llm/provider_types.py +2 -0
  82. {mcp_agent → fast_agent}/llm/sampling_converter.py +15 -12
  83. {mcp_agent → fast_agent}/llm/usage_tracking.py +23 -5
  84. fast_agent/mcp/__init__.py +54 -0
  85. {mcp_agent → fast_agent}/mcp/elicitation_factory.py +3 -3
  86. {mcp_agent → fast_agent}/mcp/elicitation_handlers.py +19 -10
  87. {mcp_agent → fast_agent}/mcp/gen_client.py +3 -3
  88. fast_agent/mcp/helpers/__init__.py +36 -0
  89. fast_agent/mcp/helpers/content_helpers.py +183 -0
  90. {mcp_agent → fast_agent}/mcp/helpers/server_config_helpers.py +8 -8
  91. {mcp_agent → fast_agent}/mcp/hf_auth.py +25 -23
  92. fast_agent/mcp/interfaces.py +93 -0
  93. {mcp_agent → fast_agent}/mcp/logger_textio.py +4 -4
  94. {mcp_agent → fast_agent}/mcp/mcp_agent_client_session.py +49 -44
  95. {mcp_agent → fast_agent}/mcp/mcp_aggregator.py +66 -115
  96. {mcp_agent → fast_agent}/mcp/mcp_connection_manager.py +16 -23
  97. {mcp_agent/core → fast_agent/mcp}/mcp_content.py +23 -15
  98. {mcp_agent → fast_agent}/mcp/mime_utils.py +39 -0
  99. fast_agent/mcp/prompt.py +159 -0
  100. mcp_agent/mcp/prompt_message_multipart.py → fast_agent/mcp/prompt_message_extended.py +27 -20
  101. {mcp_agent → fast_agent}/mcp/prompt_render.py +21 -19
  102. {mcp_agent → fast_agent}/mcp/prompt_serialization.py +46 -46
  103. fast_agent/mcp/prompts/__main__.py +7 -0
  104. {mcp_agent → fast_agent}/mcp/prompts/prompt_helpers.py +31 -30
  105. {mcp_agent → fast_agent}/mcp/prompts/prompt_load.py +8 -8
  106. {mcp_agent → fast_agent}/mcp/prompts/prompt_server.py +11 -19
  107. {mcp_agent → fast_agent}/mcp/prompts/prompt_template.py +18 -18
  108. {mcp_agent → fast_agent}/mcp/resource_utils.py +1 -1
  109. {mcp_agent → fast_agent}/mcp/sampling.py +31 -26
  110. {mcp_agent/mcp_server → fast_agent/mcp/server}/__init__.py +1 -1
  111. {mcp_agent/mcp_server → fast_agent/mcp/server}/agent_server.py +5 -6
  112. fast_agent/mcp/ui_agent.py +48 -0
  113. fast_agent/mcp/ui_mixin.py +209 -0
  114. fast_agent/mcp_server_registry.py +90 -0
  115. {mcp_agent → fast_agent}/resources/examples/data-analysis/analysis-campaign.py +5 -4
  116. {mcp_agent → fast_agent}/resources/examples/data-analysis/analysis.py +1 -1
  117. {mcp_agent → fast_agent}/resources/examples/mcp/elicitations/forms_demo.py +3 -3
  118. {mcp_agent → fast_agent}/resources/examples/mcp/elicitations/game_character.py +2 -2
  119. {mcp_agent → fast_agent}/resources/examples/mcp/elicitations/game_character_handler.py +1 -1
  120. {mcp_agent → fast_agent}/resources/examples/mcp/elicitations/tool_call.py +1 -1
  121. {mcp_agent → fast_agent}/resources/examples/mcp/state-transfer/agent_one.py +1 -1
  122. {mcp_agent → fast_agent}/resources/examples/mcp/state-transfer/agent_two.py +1 -1
  123. {mcp_agent → fast_agent}/resources/examples/researcher/researcher-eval.py +1 -1
  124. {mcp_agent → fast_agent}/resources/examples/researcher/researcher-imp.py +1 -1
  125. {mcp_agent → fast_agent}/resources/examples/researcher/researcher.py +1 -1
  126. {mcp_agent → fast_agent}/resources/examples/tensorzero/agent.py +2 -2
  127. {mcp_agent → fast_agent}/resources/examples/tensorzero/image_demo.py +3 -3
  128. {mcp_agent → fast_agent}/resources/examples/tensorzero/simple_agent.py +1 -1
  129. {mcp_agent → fast_agent}/resources/examples/workflows/chaining.py +1 -1
  130. {mcp_agent → fast_agent}/resources/examples/workflows/evaluator.py +3 -3
  131. {mcp_agent → fast_agent}/resources/examples/workflows/human_input.py +5 -3
  132. {mcp_agent → fast_agent}/resources/examples/workflows/orchestrator.py +1 -1
  133. {mcp_agent → fast_agent}/resources/examples/workflows/parallel.py +2 -2
  134. {mcp_agent → fast_agent}/resources/examples/workflows/router.py +5 -2
  135. fast_agent/resources/setup/.gitignore +24 -0
  136. fast_agent/resources/setup/agent.py +18 -0
  137. fast_agent/resources/setup/fastagent.config.yaml +44 -0
  138. fast_agent/resources/setup/fastagent.secrets.yaml.example +38 -0
  139. fast_agent/resources/setup/pyproject.toml.tmpl +17 -0
  140. fast_agent/tools/elicitation.py +369 -0
  141. fast_agent/types/__init__.py +32 -0
  142. fast_agent/types/llm_stop_reason.py +77 -0
  143. fast_agent/ui/__init__.py +38 -0
  144. fast_agent/ui/console_display.py +1005 -0
  145. {mcp_agent/human_input → fast_agent/ui}/elicitation_form.py +17 -12
  146. mcp_agent/human_input/elicitation_forms.py → fast_agent/ui/elicitation_style.py +1 -1
  147. {mcp_agent/core → fast_agent/ui}/enhanced_prompt.py +96 -25
  148. {mcp_agent/core → fast_agent/ui}/interactive_prompt.py +330 -125
  149. fast_agent/ui/mcp_ui_utils.py +224 -0
  150. {mcp_agent → fast_agent/ui}/progress_display.py +2 -2
  151. {mcp_agent/logging → fast_agent/ui}/rich_progress.py +4 -4
  152. {mcp_agent/core → fast_agent/ui}/usage_display.py +3 -8
  153. {fast_agent_mcp-0.2.58.dist-info → fast_agent_mcp-0.3.1.dist-info}/METADATA +7 -7
  154. fast_agent_mcp-0.3.1.dist-info/RECORD +203 -0
  155. fast_agent_mcp-0.3.1.dist-info/entry_points.txt +5 -0
  156. fast_agent_mcp-0.2.58.dist-info/RECORD +0 -193
  157. fast_agent_mcp-0.2.58.dist-info/entry_points.txt +0 -6
  158. mcp_agent/__init__.py +0 -114
  159. mcp_agent/agents/agent.py +0 -92
  160. mcp_agent/agents/workflow/__init__.py +0 -1
  161. mcp_agent/agents/workflow/orchestrator_agent.py +0 -597
  162. mcp_agent/app.py +0 -175
  163. mcp_agent/core/__init__.py +0 -26
  164. mcp_agent/core/prompt.py +0 -191
  165. mcp_agent/event_progress.py +0 -134
  166. mcp_agent/human_input/handler.py +0 -81
  167. mcp_agent/llm/__init__.py +0 -2
  168. mcp_agent/llm/augmented_llm_passthrough.py +0 -232
  169. mcp_agent/llm/augmented_llm_slow.py +0 -53
  170. mcp_agent/llm/providers/__init__.py +0 -8
  171. mcp_agent/llm/providers/augmented_llm_anthropic.py +0 -718
  172. mcp_agent/llm/providers/augmented_llm_google_native.py +0 -496
  173. mcp_agent/llm/providers/sampling_converter_anthropic.py +0 -57
  174. mcp_agent/llm/providers/sampling_converter_openai.py +0 -26
  175. mcp_agent/llm/sampling_format_converter.py +0 -37
  176. mcp_agent/logging/__init__.py +0 -0
  177. mcp_agent/mcp/__init__.py +0 -50
  178. mcp_agent/mcp/helpers/__init__.py +0 -25
  179. mcp_agent/mcp/helpers/content_helpers.py +0 -187
  180. mcp_agent/mcp/interfaces.py +0 -266
  181. mcp_agent/mcp/prompts/__init__.py +0 -0
  182. mcp_agent/mcp/prompts/__main__.py +0 -10
  183. mcp_agent/mcp_server_registry.py +0 -343
  184. mcp_agent/tools/tool_definition.py +0 -14
  185. mcp_agent/ui/console_display.py +0 -790
  186. mcp_agent/ui/console_display_legacy.py +0 -401
  187. {mcp_agent → fast_agent}/agents/workflow/orchestrator_prompts.py +0 -0
  188. {mcp_agent/agents → fast_agent/cli}/__init__.py +0 -0
  189. {mcp_agent → fast_agent}/cli/constants.py +0 -0
  190. {mcp_agent → fast_agent}/core/error_handling.py +0 -0
  191. {mcp_agent → fast_agent}/core/exceptions.py +0 -0
  192. {mcp_agent/cli → fast_agent/core/executor}/__init__.py +0 -0
  193. {mcp_agent → fast_agent/core}/executor/task_registry.py +0 -0
  194. {mcp_agent → fast_agent/core}/executor/workflow_signal.py +0 -0
  195. {mcp_agent → fast_agent}/human_input/form_fields.py +0 -0
  196. {mcp_agent → fast_agent}/llm/prompt_utils.py +0 -0
  197. {mcp_agent/core → fast_agent/llm}/request_params.py +0 -0
  198. {mcp_agent → fast_agent}/mcp/common.py +0 -0
  199. {mcp_agent/executor → fast_agent/mcp/prompts}/__init__.py +0 -0
  200. {mcp_agent → fast_agent}/mcp/prompts/prompt_constants.py +0 -0
  201. {mcp_agent → fast_agent}/py.typed +0 -0
  202. {mcp_agent → fast_agent}/resources/examples/data-analysis/fastagent.config.yaml +0 -0
  203. {mcp_agent → fast_agent}/resources/examples/data-analysis/mount-point/WA_Fn-UseC_-HR-Employee-Attrition.csv +0 -0
  204. {mcp_agent → fast_agent}/resources/examples/mcp/elicitations/elicitation_account_server.py +0 -0
  205. {mcp_agent → fast_agent}/resources/examples/mcp/elicitations/elicitation_forms_server.py +0 -0
  206. {mcp_agent → fast_agent}/resources/examples/mcp/elicitations/elicitation_game_server.py +0 -0
  207. {mcp_agent → fast_agent}/resources/examples/mcp/elicitations/fastagent.config.yaml +0 -0
  208. {mcp_agent → fast_agent}/resources/examples/mcp/elicitations/fastagent.secrets.yaml.example +0 -0
  209. {mcp_agent → fast_agent}/resources/examples/mcp/state-transfer/fastagent.config.yaml +0 -0
  210. {mcp_agent → fast_agent}/resources/examples/mcp/state-transfer/fastagent.secrets.yaml.example +0 -0
  211. {mcp_agent → fast_agent}/resources/examples/researcher/fastagent.config.yaml +0 -0
  212. {mcp_agent → fast_agent}/resources/examples/tensorzero/.env.sample +0 -0
  213. {mcp_agent → fast_agent}/resources/examples/tensorzero/Makefile +0 -0
  214. {mcp_agent → fast_agent}/resources/examples/tensorzero/README.md +0 -0
  215. {mcp_agent → fast_agent}/resources/examples/tensorzero/demo_images/clam.jpg +0 -0
  216. {mcp_agent → fast_agent}/resources/examples/tensorzero/demo_images/crab.png +0 -0
  217. {mcp_agent → fast_agent}/resources/examples/tensorzero/demo_images/shrimp.png +0 -0
  218. {mcp_agent → fast_agent}/resources/examples/tensorzero/docker-compose.yml +0 -0
  219. {mcp_agent → fast_agent}/resources/examples/tensorzero/fastagent.config.yaml +0 -0
  220. {mcp_agent → fast_agent}/resources/examples/tensorzero/mcp_server/Dockerfile +0 -0
  221. {mcp_agent → fast_agent}/resources/examples/tensorzero/mcp_server/entrypoint.sh +0 -0
  222. {mcp_agent → fast_agent}/resources/examples/tensorzero/mcp_server/mcp_server.py +0 -0
  223. {mcp_agent → fast_agent}/resources/examples/tensorzero/mcp_server/pyproject.toml +0 -0
  224. {mcp_agent → fast_agent}/resources/examples/tensorzero/tensorzero_config/system_schema.json +0 -0
  225. {mcp_agent → fast_agent}/resources/examples/tensorzero/tensorzero_config/system_template.minijinja +0 -0
  226. {mcp_agent → fast_agent}/resources/examples/tensorzero/tensorzero_config/tensorzero.toml +0 -0
  227. {mcp_agent → fast_agent}/resources/examples/workflows/fastagent.config.yaml +0 -0
  228. {mcp_agent → fast_agent}/resources/examples/workflows/graded_report.md +0 -0
  229. {mcp_agent → fast_agent}/resources/examples/workflows/short_story.md +0 -0
  230. {mcp_agent → fast_agent}/resources/examples/workflows/short_story.txt +0 -0
  231. {mcp_agent → fast_agent/ui}/console.py +0 -0
  232. {mcp_agent/core → fast_agent/ui}/mermaid_utils.py +0 -0
  233. {fast_agent_mcp-0.2.58.dist-info → fast_agent_mcp-0.3.1.dist-info}/WHEEL +0 -0
  234. {fast_agent_mcp-0.2.58.dist-info → fast_agent_mcp-0.3.1.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,224 @@
1
+ from __future__ import annotations
2
+
3
+ import base64
4
+ import platform
5
+ import re
6
+ import subprocess
7
+ import webbrowser
8
+ from dataclasses import dataclass
9
+ from pathlib import Path
10
+ from typing import Iterable, List, Optional
11
+
12
+ from mcp.types import BlobResourceContents, EmbeddedResource, TextResourceContents
13
+
14
+ """
15
+ Utilities for handling MCP-UI resources carried in PromptMessageExtended.channels.
16
+
17
+ Responsibilities:
18
+ - Identify MCP-UI EmbeddedResources from channels
19
+ - Decode text/blob content depending on mimeType
20
+ - Produce local HTML files that safely embed the UI content (srcdoc or iframe)
21
+ - Return presentable link labels for console display
22
+ """
23
+
24
+ # Control whether to generate data URLs for embedded HTML content
25
+ # When disabled, always use file:// URLs which work better with most terminals
26
+ ENABLE_DATA_URLS = False
27
+
28
+
29
+ @dataclass
30
+ class UILink:
31
+ title: str
32
+ file_path: str # absolute path to local html file
33
+ web_url: Optional[str] = None # Preferable clickable link (http(s) or data URL)
34
+
35
+
36
+ def _safe_filename(name: str) -> str:
37
+ name = re.sub(r"[^A-Za-z0-9_.-]", "_", name)
38
+ return name[:120] if len(name) > 120 else name
39
+
40
+
41
+ def _ensure_output_dir() -> Path:
42
+ base = Path.cwd() / ".fastagent" / "ui"
43
+ base.mkdir(parents=True, exist_ok=True)
44
+ return base
45
+
46
+
47
+ def _extract_title(uri: str | None) -> str:
48
+ if not uri:
49
+ return "UI"
50
+ try:
51
+ # ui://component/instance -> component:instance
52
+ without_scheme = uri.split("ui://", 1)[1] if uri.startswith("ui://") else uri
53
+ parts = [p for p in re.split(r"[/:]", without_scheme) if p]
54
+ if len(parts) >= 2:
55
+ return f"{parts[0]}:{parts[1]}"
56
+ return parts[0] if parts else "UI"
57
+ except Exception:
58
+ return "UI"
59
+
60
+
61
+ def _decode_text_or_blob(resource) -> Optional[str]:
62
+ """Return string content from TextResourceContents or BlobResourceContents."""
63
+ if isinstance(resource, TextResourceContents):
64
+ return resource.text or ""
65
+ if isinstance(resource, BlobResourceContents):
66
+ try:
67
+ return base64.b64decode(resource.blob or "").decode("utf-8", errors="replace")
68
+ except Exception:
69
+ return None
70
+ return None
71
+
72
+
73
+ def _first_https_url_from_uri_list(text: str) -> Optional[str]:
74
+ for line in text.splitlines():
75
+ line = line.strip()
76
+ if not line or line.startswith("#"):
77
+ continue
78
+ if line.startswith("http://") or line.startswith("https://"):
79
+ return line
80
+ return None
81
+
82
+
83
+ def _make_html_for_raw_html(html_string: str) -> str:
84
+ # Wrap with minimal HTML and sandbox guidance (iframe srcdoc will be used by browsers)
85
+ return html_string
86
+
87
+
88
+ def _make_html_for_uri(url: str) -> str:
89
+ return f"""
90
+ <!doctype html>
91
+ <html>
92
+ <head>
93
+ <meta charset=\"utf-8\" />
94
+ <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />
95
+ <title>MCP-UI</title>
96
+ <style>html,body,iframe{{margin:0;padding:0;height:100%;width:100%;border:0}}</style>
97
+ </head>
98
+ <body>
99
+ <iframe src=\"{url}\" sandbox=\"allow-scripts allow-forms allow-same-origin\" referrerpolicy=\"no-referrer\"></iframe>
100
+ </body>
101
+ </html>
102
+ """
103
+
104
+
105
+ def _write_html_file(name_hint: str, html: str) -> str:
106
+ out_dir = _ensure_output_dir()
107
+ file_name = _safe_filename(name_hint or "ui") + ".html"
108
+ out_path = out_dir / file_name
109
+ # Ensure unique filename if exists
110
+ i = 1
111
+ while out_path.exists():
112
+ out_path = out_dir / f"{_safe_filename(name_hint)}_{i}.html"
113
+ i += 1
114
+ out_path.write_text(html, encoding="utf-8")
115
+ return str(out_path.resolve())
116
+
117
+
118
+ def ui_links_from_channel(resources: Iterable[EmbeddedResource]) -> List[UILink]:
119
+ """
120
+ Build local HTML files for a list of MCP-UI EmbeddedResources and return clickable links.
121
+
122
+ Supported mime types:
123
+ - text/html: expects text or base64 blob of HTML
124
+ - text/uri-list: expects text or blob of a single URL (first valid URL is used)
125
+ - application/vnd.mcp-ui.remote-dom* : currently unsupported; generate a placeholder page
126
+ """
127
+ links: List[UILink] = []
128
+ for emb in resources:
129
+ res = emb.resource
130
+ uri = str(getattr(res, "uri", "")) if getattr(res, "uri", None) else None
131
+ mime = getattr(res, "mimeType", "") or ""
132
+ title = _extract_title(uri)
133
+ content = _decode_text_or_blob(res)
134
+
135
+ if mime.startswith("text/html"):
136
+ if content is None:
137
+ continue
138
+ html = _make_html_for_raw_html(content)
139
+ file_path = _write_html_file(title, html)
140
+ # Generate data URL only if enabled
141
+ if ENABLE_DATA_URLS:
142
+ try:
143
+ b64 = base64.b64encode(html.encode("utf-8")).decode("ascii")
144
+ data_url = f"data:text/html;base64,{b64}"
145
+ # Some terminals have limits; only attach when reasonably small
146
+ web_url = data_url if len(data_url) < 12000 else None
147
+ except Exception:
148
+ web_url = None
149
+ else:
150
+ web_url = None
151
+ links.append(UILink(title=title, file_path=file_path, web_url=web_url))
152
+
153
+ elif mime.startswith("text/uri-list"):
154
+ if content is None:
155
+ continue
156
+ url = _first_https_url_from_uri_list(content)
157
+ if not url:
158
+ # fallback: try to treat entire content as a URL
159
+ url = content.strip()
160
+ if not (url and (url.startswith("http://") or url.startswith("https://"))):
161
+ continue
162
+ html = _make_html_for_uri(url)
163
+ file_path = _write_html_file(title, html)
164
+ # Prefer the direct URL for clickability; keep file for archival
165
+ links.append(UILink(title=title, file_path=file_path, web_url=url))
166
+
167
+ elif mime.startswith("application/vnd.mcp-ui.remote-dom"):
168
+ # Not supported yet - generate informational page
169
+ placeholder = f"""
170
+ <!doctype html>
171
+ <html><head><meta charset=\"utf-8\" /><title>{title} (Unsupported)</title></head>
172
+ <body>
173
+ <p>Remote DOM resources are not supported yet in this client.</p>
174
+ <p>URI: {uri or ""}</p>
175
+ <p>mimeType: {mime}</p>
176
+ <pre style=\"white-space: pre-wrap;\">{(content or "")[:4000]}</pre>
177
+ <p>Please upgrade fast-agent when support becomes available.</p>
178
+ </body></html>
179
+ """
180
+ file_path = _write_html_file(title + "_unsupported", placeholder)
181
+ links.append(UILink(title=title + " (unsupported)", file_path=file_path))
182
+ else:
183
+ # Unknown, skip quietly
184
+ continue
185
+
186
+ return links
187
+
188
+
189
+ def open_links_in_browser(links: Iterable[UILink], mcp_ui_mode: str = "auto") -> None:
190
+ """Open links in browser/system viewer.
191
+
192
+ Args:
193
+ links: Links to open
194
+ mcp_ui_mode: UI mode setting ("disabled", "enabled", "auto")
195
+ """
196
+ # Only attempt to open files when in auto mode
197
+ if mcp_ui_mode != "auto":
198
+ return
199
+
200
+ for link in links:
201
+ try:
202
+ # Use subprocess for better file:// handling across platforms
203
+ file_path = link.file_path
204
+
205
+ system = platform.system()
206
+ if system == "Darwin": # macOS
207
+ subprocess.run(["open", file_path], check=False, capture_output=True)
208
+ elif system == "Windows":
209
+ subprocess.run(
210
+ ["start", "", file_path], shell=True, check=False, capture_output=True
211
+ )
212
+ elif system == "Linux":
213
+ # Try xdg-open first (most common), fallback to other options
214
+ try:
215
+ subprocess.run(["xdg-open", file_path], check=False, capture_output=True)
216
+ except FileNotFoundError:
217
+ # Fallback to webbrowser for Linux if xdg-open not available
218
+ webbrowser.open(f"file://{file_path}", new=2)
219
+ else:
220
+ # Unknown system, fallback to webbrowser
221
+ webbrowser.open(f"file://{file_path}", new=2)
222
+ except Exception:
223
+ # Silently ignore errors - user can still manually open the file
224
+ pass
@@ -3,8 +3,8 @@ Centralized progress display configuration for MCP Agent.
3
3
  Provides a shared progress display instance for consistent progress handling.
4
4
  """
5
5
 
6
- from mcp_agent.console import console
7
- from mcp_agent.logging.rich_progress import RichProgressDisplay
6
+ from fast_agent.ui.console import console
7
+ from fast_agent.ui.rich_progress import RichProgressDisplay
8
8
 
9
9
  # Main progress display instance - shared across the application
10
10
  progress_display = RichProgressDisplay(console)
@@ -7,8 +7,8 @@ from typing import Optional
7
7
  from rich.console import Console
8
8
  from rich.progress import Progress, SpinnerColumn, TextColumn
9
9
 
10
- from mcp_agent.console import console as default_console
11
- from mcp_agent.event_progress import ProgressAction, ProgressEvent
10
+ from fast_agent.event_progress import ProgressAction, ProgressEvent
11
+ from fast_agent.ui.console import console as default_console
12
12
 
13
13
 
14
14
  class RichProgressDisplay:
@@ -140,7 +140,7 @@ class RichProgressDisplay:
140
140
  "details": event.details or "",
141
141
  "task_name": task_name,
142
142
  }
143
-
143
+
144
144
  # For TOOL_PROGRESS events, update progress if available
145
145
  if event.action == ProgressAction.TOOL_PROGRESS and event.progress is not None:
146
146
  if event.total is not None:
@@ -149,7 +149,7 @@ class RichProgressDisplay:
149
149
  else:
150
150
  # If no total, just show as indeterminate progress
151
151
  self._progress.reset(task_id)
152
-
152
+
153
153
  self._progress.update(task_id, **update_kwargs)
154
154
 
155
155
  if (
@@ -22,7 +22,7 @@ def display_usage_report(
22
22
  # Check if progress display is enabled (only relevant for fastagent context)
23
23
  if not show_if_progress_disabled:
24
24
  try:
25
- from mcp_agent import config
25
+ from fast_agent import config
26
26
 
27
27
  settings = config.get_settings()
28
28
  if not settings.logger.progress_display:
@@ -51,16 +51,11 @@ def display_usage_report(
51
51
  # Get context percentage for this agent
52
52
  context_percentage = agent.usage_accumulator.context_usage_percentage
53
53
 
54
- # Get model name from LLM's default_request_params
54
+ # Get model name via typed property when available
55
55
  model = "unknown"
56
56
  if hasattr(agent, "_llm") and agent._llm:
57
57
  llm = agent._llm
58
- if (
59
- hasattr(llm, "default_request_params")
60
- and llm.default_request_params
61
- and hasattr(llm.default_request_params, "model")
62
- ):
63
- model = llm.default_request_params.model or "unknown"
58
+ model = getattr(llm, "model_name", None) or "unknown"
64
59
 
65
60
  # Standardize model name truncation - use consistent 25 char width with 22+... truncation
66
61
  if len(model) > 25:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fast-agent-mcp
3
- Version: 0.2.58
3
+ Version: 0.3.1
4
4
  Summary: Define, Prompt and Test MCP enabled Agents and Workflows
5
5
  Author-email: Shaun Smith <fastagent@llmindset.co.uk>
6
6
  License: Apache License
@@ -208,18 +208,18 @@ License-File: LICENSE
208
208
  Classifier: License :: OSI Approved :: Apache Software License
209
209
  Classifier: Operating System :: OS Independent
210
210
  Classifier: Programming Language :: Python :: 3
211
- Requires-Python: >=3.13
211
+ Requires-Python: >=3.13.7
212
212
  Requires-Dist: a2a-sdk>=0.3.0
213
213
  Requires-Dist: aiohttp>=3.11.13
214
- Requires-Dist: anthropic>=0.63.0
214
+ Requires-Dist: anthropic>=0.66.0
215
215
  Requires-Dist: azure-identity>=1.14.0
216
216
  Requires-Dist: boto3>=1.35.0
217
217
  Requires-Dist: deprecated>=1.2.18
218
218
  Requires-Dist: email-validator>=2.2.0
219
219
  Requires-Dist: fastapi>=0.115.6
220
- Requires-Dist: google-genai>=1.27.0
221
- Requires-Dist: mcp==1.13.1
222
- Requires-Dist: openai>=1.99.9
220
+ Requires-Dist: google-genai>=1.33.0
221
+ Requires-Dist: mcp==1.14.0
222
+ Requires-Dist: openai>=1.106.1
223
223
  Requires-Dist: opentelemetry-distro>=0.55b0
224
224
  Requires-Dist: opentelemetry-exporter-otlp-proto-http>=1.7.0
225
225
  Requires-Dist: opentelemetry-instrumentation-anthropic>=0.43.1; python_version >= '3.10' and python_version < '4.0'
@@ -321,7 +321,7 @@ Here is the complete `sizer.py` Agent application, with boilerplate code:
321
321
 
322
322
  ```python
323
323
  import asyncio
324
- from mcp_agent.core.fastagent import FastAgent
324
+ from fast_agent.core.fastagent import FastAgent
325
325
 
326
326
  # Create the application
327
327
  fast = FastAgent("Agent Example")
@@ -0,0 +1,203 @@
1
+ fast_agent/__init__.py,sha256=bmws6wJQefvfO0Cd5x9VLTI7RCdjF6NqZtWSj_14tv0,3349
2
+ fast_agent/config.py,sha256=8CPbTctXGdSneAkMory5ZRXkUsUj4AyKnaf_nmEamQA,19886
3
+ fast_agent/constants.py,sha256=d5EMSO2msRkjRFz8MgnnhpMnO3woqKP0EcQ4b_yI60w,235
4
+ fast_agent/context.py,sha256=nBelOqehSH91z3aG2nYhwETP-biRzz-iuA2fqmKdHP8,7700
5
+ fast_agent/context_dependent.py,sha256=KU1eydVBoIt4bYOZroqxDgE1AUexDaZi7hurE26QsF4,1584
6
+ fast_agent/event_progress.py,sha256=OETeh-4jJGyxvvPAlVTzW4JsCbFUmOTo-ti0ROgtG5M,1999
7
+ fast_agent/interfaces.py,sha256=R2C1TzNxAO8Qxaam5oHthfhHRNKoP78FtKSV6vPy_Gk,6251
8
+ fast_agent/mcp_server_registry.py,sha256=TDCNpQIehsh1PK4y7AWp_rkQMcwYx7FaouUbK3kWNZo,2635
9
+ fast_agent/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
+ fast_agent/agents/__init__.py,sha256=kBI2VWTitLyWf8K3dFMyuE-K7Ufp7mkHBomM2K3I8H8,1128
11
+ fast_agent/agents/agent_types.py,sha256=ugolD3lC2KxSfBYjjRf9HjNATZaFx1o4Fhjb15huSgk,1776
12
+ fast_agent/agents/llm_agent.py,sha256=iuy3kO5Q-f9bm3tjYLG2Wurd0gK2sLhTfTkSnfVWzSw,8311
13
+ fast_agent/agents/llm_decorator.py,sha256=yzaYqsT8lqey4dbZrv1oK9qUqf8I2RMPYiWOy0uVHqA,16443
14
+ fast_agent/agents/mcp_agent.py,sha256=R-OeHu0dO61z0vQwtCqKL2WLs1o9kHdsu74Fu4ALaCM,35494
15
+ fast_agent/agents/tool_agent.py,sha256=zSaVQH-mBICgE3ildeZx24i00u_KMOk5P4OuJBTiQ3g,6571
16
+ fast_agent/agents/workflow/chain_agent.py,sha256=Pd8dOH_YdKu3LXsKa4fwqzY_B2qVuhzdfCUiKi5v17s,6293
17
+ fast_agent/agents/workflow/evaluator_optimizer.py,sha256=rhzazy8Aj-ydId6kmBC77TmtYZ5mirSe7eV6PPMWkBA,12040
18
+ fast_agent/agents/workflow/iterative_planner.py,sha256=CTtDpK-YGrFFZMQQmFeE-2I_9-cZv23pNwUoh8w5voA,20478
19
+ fast_agent/agents/workflow/orchestrator_models.py,sha256=X_hD66_YvdGIsNra3XWbVKj2KyNVL7usCdNsMsDXV3Q,7238
20
+ fast_agent/agents/workflow/orchestrator_prompts.py,sha256=EXKEI174sshkZyPPEnWbwwNafzSPuA39MXL7iqG9cWc,9106
21
+ fast_agent/agents/workflow/parallel_agent.py,sha256=DlJXDURAfx-WBF297tKBLfH93gDFSAPUyEmJr7QNGyw,7476
22
+ fast_agent/agents/workflow/router_agent.py,sha256=KWLOZMFI4YPn0fqzR001qLFbOe7DYxx-E2c0BgIgO-g,11081
23
+ fast_agent/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
24
+ fast_agent/cli/__main__.py,sha256=VD-UuXvIHJtrDGgVVpsAZGJ_GfVTalSD1Kx9vzixzfM,1129
25
+ fast_agent/cli/constants.py,sha256=KawdkaN289nVB02DKPB4IVUJ8-fohIUD0gLfOp0P7B8,551
26
+ fast_agent/cli/main.py,sha256=EkNOpNobFW83fkzJL4lkdhtqOq7c_f55KFpBR9VrFTU,3905
27
+ fast_agent/cli/terminal.py,sha256=tDN1fJ91Nc_wZJTNafkQuD7Z7gFscvo1PHh-t7Wl-5s,1066
28
+ fast_agent/cli/commands/check_config.py,sha256=nMiOBs-Sc7XqUU6tLReLn1JPXHqjR0Kuz4rCa3mDXp0,22831
29
+ fast_agent/cli/commands/go.py,sha256=VRiHq9h1UGIndLdQJMAwEM6bwTGy-h5n6w__bYCGaHM,15094
30
+ fast_agent/cli/commands/quickstart.py,sha256=hQZYlvktPdDNdaZOZkBgcvi8u0bMW5yFhz4BLBZ251I,21175
31
+ fast_agent/cli/commands/server_helpers.py,sha256=BmljUNLIcZdFpffYxEPfJf8rrX3JhTzMA7VONoZLAjM,3650
32
+ fast_agent/cli/commands/setup.py,sha256=rCp5wUs5kjbHJqi3Jz9ByCpOSvJ7L4KB0hpcKB8qpCM,6377
33
+ fast_agent/cli/commands/url_parser.py,sha256=ivWrsODeVO9GGERkaTawYIxZuf57uRga1gubwT3n3vU,5907
34
+ fast_agent/core/__init__.py,sha256=RsHaeZTQmmNC6cd--kGsnu-jp053cr7h0TUMEnBcMQ0,1223
35
+ fast_agent/core/agent_app.py,sha256=cdzNwpb--SUNYbhkUX6RolqVnxJ5WSchxw5I4gFrvpk,16836
36
+ fast_agent/core/core_app.py,sha256=_8Di00HD2BzWhCAaopAUS0Hzc7pg0249QUUfPuLZ36A,4266
37
+ fast_agent/core/direct_decorators.py,sha256=eHhQfKLbeaoH-W0snzAVJRxga7wTNGXBk5DEJTAbZB8,23642
38
+ fast_agent/core/direct_factory.py,sha256=HGGnnF4Z9k_N3r0Iin_sp2Ch308To1oKX8JTKHjuUq0,21350
39
+ fast_agent/core/error_handling.py,sha256=xoyS2kLe0eG0bj2eSJCJ2odIhGUve2SbDR7jP-A-uRw,624
40
+ fast_agent/core/exceptions.py,sha256=ENAD_qGG67foxy6vDkIvc-lgopIUQy6O7zvNPpPXaQg,2289
41
+ fast_agent/core/fastagent.py,sha256=duxLEQMXdKqvKXAxbbe86_V7ZQR-etR-OMt-XfvLB1I,25351
42
+ fast_agent/core/prompt.py,sha256=qNUFlK3KtU7leYysYUglzBYQnEYiXu__iR_T8189zc0,203
43
+ fast_agent/core/validation.py,sha256=GZ0hUTxkr5KMY1wr6_ifDy91Ycvcx384gZEMOwdie9w,12681
44
+ fast_agent/core/executor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
45
+ fast_agent/core/executor/executor.py,sha256=egmu1bBJmNjfkMZRdaF2CowyHu0t20TiroKBEGgn2t8,9398
46
+ fast_agent/core/executor/task_registry.py,sha256=PCALFeYtkQrPBg4RBJnlA0aDI8nHclrNkHGUS4kV3W8,1242
47
+ fast_agent/core/executor/workflow_signal.py,sha256=Cg1uZBk3fn8kXhPOg-wINNuVaf3v9pvLD6NbqWy5Z6E,11142
48
+ fast_agent/core/logging/__init__.py,sha256=dFW2bbTtz45zebUuQs7RVi7mg1RJm4DHH6TGfBMhW14,167
49
+ fast_agent/core/logging/events.py,sha256=kmk6sWxYm4DZGRRNVUi2cOL4X1Pr1cr535uBmStBZxo,4254
50
+ fast_agent/core/logging/json_serializer.py,sha256=kQDkwTHIkHSQgbhDOJhMoetNvfJVMZGOScaKoLX8kmw,5797
51
+ fast_agent/core/logging/listeners.py,sha256=dubbGJoieryyhXN-JF-GrjkW-dgMq93bElM-NBkwA_Q,9366
52
+ fast_agent/core/logging/logger.py,sha256=L-hLfUGFCIABoNYDiUkNHWvFxL6j-6zn5Pc5E7aC44M,11074
53
+ fast_agent/core/logging/transport.py,sha256=i_WYXk5mqyfetT72bCYrbdrMWcuL1HJCyeQKfQg7U2w,16994
54
+ fast_agent/history/history_exporter.py,sha256=Ab5Z85LhwjjOfXkc7aJVpQJUMGNYr7MpR4qtKHTrXuA,1427
55
+ fast_agent/human_input/__init__.py,sha256=4Jr_0JLJwdQ3iEUNd6Api9InldtnRMDv_WeZq_WEHpA,935
56
+ fast_agent/human_input/elicitation_handler.py,sha256=U6278SJLIu1tosyL6qvo5OVwMSVE03gpGlWoF8YDlvQ,3985
57
+ fast_agent/human_input/elicitation_state.py,sha256=L_vSTpw1-TSDumRYa89Me-twWRbUL2w7GNVhVJmn3KE,1152
58
+ fast_agent/human_input/form_fields.py,sha256=aE7HdR-wOPO_6HllNaJXtn3BzpPsC4TctUApbveRk8g,7644
59
+ fast_agent/human_input/simple_form.py,sha256=_flUll9z93VPjKqLS7gvz4L1_YJ3-KNx8_ZpUaaxhoQ,3508
60
+ fast_agent/human_input/types.py,sha256=3Zz89yIt8SuDAVAaRy-r4Vw0-M6AWahwbqQ0yOcoe20,954
61
+ fast_agent/llm/__init__.py,sha256=MCsrkfnTQXYvn0SofJ-JFmp1l1jX_eidgvegbWbgpsw,184
62
+ fast_agent/llm/fastagent_llm.py,sha256=CqlvvT2w3WkmNsJHH-VUAYh7FtmQIj3TRJAeB6yb3MI,24200
63
+ fast_agent/llm/memory.py,sha256=POFoBVMHK0wX4oLd3Gz-6Ru3uC4kTCvAqsVQ77e7KJA,8551
64
+ fast_agent/llm/model_database.py,sha256=CXpAncjfFGmzjVyvAaKE5QuvDoLwMWXqUHngv_4oDl8,12609
65
+ fast_agent/llm/model_factory.py,sha256=0quhsqz816GxEM_vuRaJ4n6U8C3lp5KxtIphxepIXVI,12862
66
+ fast_agent/llm/model_info.py,sha256=DAIMW70W-EFqNLIudhjHJE2gobHUAKg90gkwOPuaFUc,4125
67
+ fast_agent/llm/prompt_utils.py,sha256=yWQHykoK13QRF7evHUKxVF0SpVLN-Bsft0Yixzvn0g0,4825
68
+ fast_agent/llm/provider_key_manager.py,sha256=igzs1ghXsUp0wA4nJVVfWCWiYOib8Ux4jMGlhWbgXu8,3396
69
+ fast_agent/llm/provider_types.py,sha256=Ya0MGo_4cE0oCwinqPvr9SJUwx4hEJ7CFbCrLB_27FI,1142
70
+ fast_agent/llm/request_params.py,sha256=OW9WnQAD-I2fz2JzMsqPY2wwwHFG0SI4yAvC1WxTfNY,1735
71
+ fast_agent/llm/sampling_converter.py,sha256=YEUpdVeZlJNDljCuwrXyhsb40o0-1QuWGTuorQnvhbo,3102
72
+ fast_agent/llm/usage_tracking.py,sha256=6FRIIimIaAoSlYTCGVG00GuavGRIFbOBEBWHvfBxWw0,16791
73
+ fast_agent/llm/internal/passthrough.py,sha256=0P7qc13_xTV1aMHJmZ2KQEtMtGtu0H7ArkEL6hiy5_M,5209
74
+ fast_agent/llm/internal/playback.py,sha256=HzV0BitORA977_3OWAbMZjLZpIHBKt-_PeOO3BeKGlI,5028
75
+ fast_agent/llm/internal/silent.py,sha256=TVhjp0sEcPpR35n_QjYrMu0CKVX2humAt1GBR6y_itE,1563
76
+ fast_agent/llm/internal/slow.py,sha256=MQf21cK7aM0yPN1_j1hSJRTEp4UGbrPo_sCP81WDcxQ,1310
77
+ fast_agent/llm/provider/anthropic/anthropic_utils.py,sha256=zkeMpAlV9YW9pP1FObkyqR8wg8e-Xir9SCwsom94zao,3246
78
+ fast_agent/llm/provider/anthropic/llm_anthropic.py,sha256=GGfNM9dTVy17YTGOxaat-YlJlW2iWi-pcBmVg_ejJPE,25288
79
+ fast_agent/llm/provider/anthropic/multipart_converter_anthropic.py,sha256=fO6qoKvG2ede85CvdvMipOlATwLjbGKahvsu2OzJhvk,16460
80
+ fast_agent/llm/provider/bedrock/bedrock_utils.py,sha256=mqWCCeB1gUQSL2KRUMqpFjvHZ0ZTJugCsd5YOrx6U30,7750
81
+ fast_agent/llm/provider/bedrock/llm_bedrock.py,sha256=XGB4bGZt74nQnGz0LY4HOSffdaRbz-5UWXX6fyjPPmk,99755
82
+ fast_agent/llm/provider/google/google_converter.py,sha256=iQZps4773Bc8SUODduLpfkVpT3J1rIg1bFgLQ2CCqZc,18926
83
+ fast_agent/llm/provider/google/llm_google_native.py,sha256=jHJ3dXDltFE9tJhvPe8OuHardIHAJqmDrJkhYpYZkeY,18843
84
+ fast_agent/llm/provider/openai/llm_aliyun.py,sha256=ti7VHTpwl0AG3ytwBERpDzVtacvCfamKnl2bAnTE96s,1213
85
+ fast_agent/llm/provider/openai/llm_azure.py,sha256=O-TIEL6hGOArqRlvEjocaeW4OMUaelSnh6xpqhrrcHQ,6070
86
+ fast_agent/llm/provider/openai/llm_deepseek.py,sha256=aAMX7pd1qDfl54Z9pLvJTVYETc4yKKMRYrEMiPIhd7w,3762
87
+ fast_agent/llm/provider/openai/llm_generic.py,sha256=O_mmu3o9LeAZ6Kp405I-GfwrS8AuVkyX3tT6aCDCfLY,1168
88
+ fast_agent/llm/provider/openai/llm_google_oai.py,sha256=u1yZVeDds9z2hvydz_kUpFe2RANTNwEtlPgB-OEmgrY,1095
89
+ fast_agent/llm/provider/openai/llm_groq.py,sha256=trNSy3T94_fJWAhVn51iESP_J7sQh_23ufVegKKNHBs,5247
90
+ fast_agent/llm/provider/openai/llm_openai.py,sha256=OW1IwDn9sKBoITwUZYc3kHNyRLzJnC4qYcBwVytG8eA,22196
91
+ fast_agent/llm/provider/openai/llm_openrouter.py,sha256=RBTUkNBRqE8WoucCoVnXP5GhnMwc2tiRacXbMHVf1xM,1943
92
+ fast_agent/llm/provider/openai/llm_tensorzero_openai.py,sha256=yrV0kZ2zRohErdjhvWGDTl0OnPi2SbuzY_8MchXiVTU,5466
93
+ fast_agent/llm/provider/openai/llm_xai.py,sha256=fEyO9XlU3Ef1a-cXdJl0Qe-FmE562cA-UJOGvzqLO6M,1375
94
+ fast_agent/llm/provider/openai/multipart_converter_openai.py,sha256=M7cbM4F8_xycPtVHJv1kBYYBX7KRXyYPCDb1YKQEgo0,20925
95
+ fast_agent/llm/provider/openai/openai_multipart.py,sha256=uuoRMYWiznYksBODbknBuqe65UxEHE1h7AphHpdnCCM,6864
96
+ fast_agent/llm/provider/openai/openai_utils.py,sha256=RI9UgF7SGkZ02bAep7glvLy3erbismmZp7wXDsRoJPQ,2034
97
+ fast_agent/mcp/__init__.py,sha256=fS322k3GsnZ8LcPImoAy_TtiqgiJgDmMlbgCc7AvVdQ,1458
98
+ fast_agent/mcp/common.py,sha256=MpSC0fLO21RcDz4VApah4C8_LisVGz7OXkR17Xw-9mY,431
99
+ fast_agent/mcp/elicitation_factory.py,sha256=p9tSTcs1KSCXkFcFv1cG7vJBpS1PedOJ5bcBJp0qKw4,3172
100
+ fast_agent/mcp/elicitation_handlers.py,sha256=LWNKn850Ht9V1SGTfAZDptlsgzrycNhOPNsCcqzsuUY,6884
101
+ fast_agent/mcp/gen_client.py,sha256=Q0hhCVzC659GsvTLJIbhUBgGwsAJRL8b3ejTFokyjn4,3038
102
+ fast_agent/mcp/hf_auth.py,sha256=ndDvR7E9LCc5dBiMsStFXtvvX9lYrL-edCq_qJw4lDw,4476
103
+ fast_agent/mcp/interfaces.py,sha256=xCWONGXe4uQSmmBlMZRD3mflPegTJnz2caVNihEl3ok,2411
104
+ fast_agent/mcp/logger_textio.py,sha256=4YLVXlXghdGm1s_qp1VoAWEX_eWufBfD2iD7l08yoak,3170
105
+ fast_agent/mcp/mcp_agent_client_session.py,sha256=XRCliiYMxbCbkqS2VSrw7tAtnkLIP9HSRpSWaXW02MQ,13663
106
+ fast_agent/mcp/mcp_aggregator.py,sha256=5J1QBGJGZMW7QlqKCWk77_THEzKwiTzKYsqaO_DrTTw,53180
107
+ fast_agent/mcp/mcp_connection_manager.py,sha256=IinYz2wdxPC5s3cAEb1w3kDtJAfUoMVsGUIHDogDxCo,18220
108
+ fast_agent/mcp/mcp_content.py,sha256=F9bgJ57EO9sgWg1m-eTNM6xd9js79mHKf4e9O8K8jrI,8829
109
+ fast_agent/mcp/mime_utils.py,sha256=D6YXNdZJ351BjacSW5o0sVF_hrWuRHD6UyWS4TDlLZI,2915
110
+ fast_agent/mcp/prompt.py,sha256=U3jAIjGyGqCpS96zKf0idC7PI4YdFHq-3qjpCsEybxQ,5983
111
+ fast_agent/mcp/prompt_message_extended.py,sha256=-sw6FITvN0rTeIVWDUslNTPYyFEieToydOAf1-phQLs,4650
112
+ fast_agent/mcp/prompt_render.py,sha256=AqDaQqM6kqciV9X79S5rsRr3VjcQ_2JOiLaHqpRzsS4,2888
113
+ fast_agent/mcp/prompt_serialization.py,sha256=oivhqW3WjKYMTw2zE6_LOt8PY7K1ktZr9z9dk1XH9I0,17906
114
+ fast_agent/mcp/resource_utils.py,sha256=cu-l9aOy-NFs8tPihYRNjsB2QSuime8KGOGpUvihp84,6589
115
+ fast_agent/mcp/sampling.py,sha256=3EhEguls5GpVMr_SYrVQcYSRXlryGmqidn-zbFaeDMk,6711
116
+ fast_agent/mcp/ui_agent.py,sha256=nrnBGS87hHdpbS_9Vl59Z6ar6FKTZMz9Yhmz_9FM8dY,1434
117
+ fast_agent/mcp/ui_mixin.py,sha256=iOlSNJVPwiMUun0clCiWyot59Qgy8R7ZvUgH2afRnQA,7662
118
+ fast_agent/mcp/helpers/__init__.py,sha256=o6-HuX6bEVFnfT_wgclFOVb1NxtOsJEOnHX8L2IqDdw,857
119
+ fast_agent/mcp/helpers/content_helpers.py,sha256=2os7b6pZHLE-Nu9uEgw5yafQtadH9J2jyAG_g9Wk8uA,5828
120
+ fast_agent/mcp/helpers/server_config_helpers.py,sha256=yCwdIEVvarM32dSmm5Ehb7E3qZrmg10rToWnzZmEpOE,969
121
+ fast_agent/mcp/prompts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
122
+ fast_agent/mcp/prompts/__main__.py,sha256=Jsx30MceW6_f0rU_RJw2qQVB7zj2yRPP8mXXjBuJiNw,145
123
+ fast_agent/mcp/prompts/prompt_constants.py,sha256=Q9W0t3rOXl2LHIG9wcghApUV2QZ1iICuo7SwVwHUf3c,566
124
+ fast_agent/mcp/prompts/prompt_helpers.py,sha256=lvcgG1D61FimGUS5rYifMmmidWwFpIs3Egvjf1sfnkE,7486
125
+ fast_agent/mcp/prompts/prompt_load.py,sha256=6_npQBlZ3JzCwcb8Jwxv1zzUnB4cNuSVVj-Kxf3tmE0,5384
126
+ fast_agent/mcp/prompts/prompt_server.py,sha256=yc7Ui_9nR0oQimZjX19wp4AkGJIWB8pYP3wB9jma5ys,19241
127
+ fast_agent/mcp/prompts/prompt_template.py,sha256=SAklXs9wujYqqEWv5vzRI_cdjSmGnWlDmPLZ5qkXZO4,15695
128
+ fast_agent/mcp/server/__init__.py,sha256=AJFNzdmuHPRL3jqFhDVDJste_zYE_KJ3gGYDsbghvl0,156
129
+ fast_agent/mcp/server/agent_server.py,sha256=zJMFnPfXPsbLt5ZyGMTN90YzIzwV7TaSQ4WYs9lnB2Q,20194
130
+ fast_agent/resources/examples/data-analysis/analysis-campaign.py,sha256=0Z7TZ6QsSwYJPGJZRMl8742980QHDgibC6Jjw2jOHms,7292
131
+ fast_agent/resources/examples/data-analysis/analysis.py,sha256=y9lSSZp_HfgiJy0M23heYSI61bazK89PIzM9m1nVP_o,2579
132
+ fast_agent/resources/examples/data-analysis/fastagent.config.yaml,sha256=ini94PHyJCfgpjcjHKMMbGuHs6LIj46F1NwY0ll5HVk,1609
133
+ fast_agent/resources/examples/data-analysis/mount-point/WA_Fn-UseC_-HR-Employee-Attrition.csv,sha256=pcMeOL1_r8m8MziE6xgbBrQbjl5Ijo98yycZn7O-dlk,227977
134
+ fast_agent/resources/examples/mcp/elicitations/elicitation_account_server.py,sha256=ZrPcj0kv75QXvtN0J_vhCmwxycnAodv35adUBZ9_8Ss,2903
135
+ fast_agent/resources/examples/mcp/elicitations/elicitation_forms_server.py,sha256=JSRSZ2rKqsHB0gt7LvyyVR9whnhmi_8kbvc9V6jvx2M,9329
136
+ fast_agent/resources/examples/mcp/elicitations/elicitation_game_server.py,sha256=z9kHdNc6XWjAWkvet7inVBIcYxfWoxU6n9iHrsEqU7A,6206
137
+ fast_agent/resources/examples/mcp/elicitations/fastagent.config.yaml,sha256=HPe0cuFL4-rzS4hHNgZiLMPEv0jYXOp7iSsrUliAaqs,1080
138
+ fast_agent/resources/examples/mcp/elicitations/fastagent.secrets.yaml.example,sha256=1vkBmh9f4mnQZm6-2B7vyU1OepImviPW5MNAJkvUIPE,394
139
+ fast_agent/resources/examples/mcp/elicitations/forms_demo.py,sha256=caC7UFs2-vWEWporu9deqpfSJOYya482kr-tIIWC9U4,4351
140
+ fast_agent/resources/examples/mcp/elicitations/game_character.py,sha256=Me4-vNsjZTFkV95fUXMYpmDaT8v6hnXsXey9eh53W8k,2374
141
+ fast_agent/resources/examples/mcp/elicitations/game_character_handler.py,sha256=kD4aBZ98GoKDqCKTVlTqsNaQZifUxbfYXHPA93aTGSE,11217
142
+ fast_agent/resources/examples/mcp/elicitations/tool_call.py,sha256=HgaP1AP96As9Vql69Ov2CXH4uPccjOeZSRa0n8-hBGc,531
143
+ fast_agent/resources/examples/mcp/state-transfer/agent_one.py,sha256=lVEIidIcFyeYwsR6h_2h5Rnmfu_KnHIrRo53Aehg85Q,456
144
+ fast_agent/resources/examples/mcp/state-transfer/agent_two.py,sha256=7TC2Z3uuL-x27LXGweh7ziHwDXFZYJq9f5x-DAWTsqM,479
145
+ fast_agent/resources/examples/mcp/state-transfer/fastagent.config.yaml,sha256=A6CUcDqnFXlkhsA_Mw-I0ys2Egn7a37AfVSWl89lvxA,797
146
+ fast_agent/resources/examples/mcp/state-transfer/fastagent.secrets.yaml.example,sha256=pVGyO_c6j3BToNpnL0d6W1FD5iLcuCNBrqA1sYMV-cA,422
147
+ fast_agent/resources/examples/researcher/fastagent.config.yaml,sha256=TbVMHQCKcytVr44o0cpsgP-tAJ2S2OlTgn6VnXSTIpM,2242
148
+ fast_agent/resources/examples/researcher/researcher-eval.py,sha256=qr_9TpzOSwEFENR5bkgieDyIrbst6nWjtlwDJzp7ok4,1834
149
+ fast_agent/resources/examples/researcher/researcher-imp.py,sha256=LmNcs6rOYnJabspxo6xgpiI9tzHVE1sJUFwLK3QrV2E,7880
150
+ fast_agent/resources/examples/researcher/researcher.py,sha256=MZfGvHfxqutzkCNEkAKioXGxHn-E4JggRQQz43wV5pM,1334
151
+ fast_agent/resources/examples/tensorzero/.env.sample,sha256=khV_apbP4XprpNuIaeVicnHaVHEkwIdWGyZCvW1OLDc,35
152
+ fast_agent/resources/examples/tensorzero/Makefile,sha256=BOvcJvPBAJN2MDh8brLsy2leHGwuT_bBjPzakOsUSCU,427
153
+ fast_agent/resources/examples/tensorzero/README.md,sha256=xsA1qWjg2mI240jlbeFYWjYm_pQLsGeQiPiSlEtayeQ,2126
154
+ fast_agent/resources/examples/tensorzero/agent.py,sha256=TCa3eIsvQufJ8Gy1yXK0MjgOEtdiU8y5qpjIARTyypU,1273
155
+ fast_agent/resources/examples/tensorzero/docker-compose.yml,sha256=YgmWgoHHDDTGeqRlU8Z21mLdEqo48IoKZsnlXaDZkrc,2851
156
+ fast_agent/resources/examples/tensorzero/fastagent.config.yaml,sha256=3uJJ9p-0evDG48zr2QneektO4fe_h4uRPh1dyWfe7-k,355
157
+ fast_agent/resources/examples/tensorzero/image_demo.py,sha256=fq1Ac1ZksL_AiMN1T2r-tBRW79sWtbEY_QCViLsIAMQ,2124
158
+ fast_agent/resources/examples/tensorzero/simple_agent.py,sha256=jpK4p3KbfOfjhqLJNUFX4L_zll05buI2Cru8JBRnrIY,859
159
+ fast_agent/resources/examples/tensorzero/demo_images/clam.jpg,sha256=K1NWrhz5QMfgjZfDMMIVctWwbwTyJSsPHLDaUMbcn18,22231
160
+ fast_agent/resources/examples/tensorzero/demo_images/crab.png,sha256=W7R3bSKKDmZCjxJEmFk0pBXVhXXhfPGM1gIiVuv_eu4,58413
161
+ fast_agent/resources/examples/tensorzero/demo_images/shrimp.png,sha256=2r3c6yHE25MpVRDTTwxjAGs1ShJ2UI-qxJqbxa-9ew4,7806
162
+ fast_agent/resources/examples/tensorzero/mcp_server/Dockerfile,sha256=pujKW5xDY5q0PvIYsn8Wsh9Tz2F3sVuKTJc3o8lgt4M,681
163
+ fast_agent/resources/examples/tensorzero/mcp_server/entrypoint.sh,sha256=yLUXZKd4mF2k_ZFAd6125ZstLmrtksePpfgCNdewSyU,1123
164
+ fast_agent/resources/examples/tensorzero/mcp_server/mcp_server.py,sha256=8Wr6VzNFihri3mv9wLo37i5Ly1VWL4s4jSnfiRG7Ez0,933
165
+ fast_agent/resources/examples/tensorzero/mcp_server/pyproject.toml,sha256=3AppZ_HbIEmRGg_phGuEOq-Q63CY_IIsrIBr658ka9U,228
166
+ fast_agent/resources/examples/tensorzero/tensorzero_config/system_schema.json,sha256=q81vtb8eyX1gU0qOhT_BFNo7nI2Lg2o-D_Bvp8watEI,626
167
+ fast_agent/resources/examples/tensorzero/tensorzero_config/system_template.minijinja,sha256=_Ekz9YuE76pkmwtcMNJeDlih2U5vPRgFB5wFojAVde8,501
168
+ fast_agent/resources/examples/tensorzero/tensorzero_config/tensorzero.toml,sha256=wYDKzHyX0A2x42d1vF5a72ot304iTP8_i5Y1rzAcCEA,890
169
+ fast_agent/resources/examples/workflows/chaining.py,sha256=GOBAwn97Io0mNe6H6l7UKENqsR6FL03HKgcXYhMTUCA,890
170
+ fast_agent/resources/examples/workflows/evaluator.py,sha256=gfdjKctKpEiPB23gqgkVpJ_patBuotqt8IFuPTG5i8g,3112
171
+ fast_agent/resources/examples/workflows/fastagent.config.yaml,sha256=qaxk-p7Pl7JepdL3a7BTl0CIp4LHCXies7pFdVWS9xk,783
172
+ fast_agent/resources/examples/workflows/graded_report.md,sha256=QVF38xEtDIO1a2P-xv2hlBEG6KKYughtFkzDhY2NpzE,2726
173
+ fast_agent/resources/examples/workflows/human_input.py,sha256=ammL7aU_U0K3XsjLwmgq0_HznaARVDO8urPEWJYbWqY,807
174
+ fast_agent/resources/examples/workflows/orchestrator.py,sha256=E99EqLNHKjC9YtuME-HqT0lNCCxiJJPdy2jToOEL7zw,2541
175
+ fast_agent/resources/examples/workflows/parallel.py,sha256=JJRxUdEgqHYW5-_ZIFDb4oUx8gsZicyxYwCPYmNWsDE,1841
176
+ fast_agent/resources/examples/workflows/router.py,sha256=_XLOsjrjmLe2i-eGmClPASGJjaf57RVQjld6uCuv_Lk,2090
177
+ fast_agent/resources/examples/workflows/short_story.md,sha256=XN9I2kzCcMmke3dE5F2lyRH5iFUZUQ8Sy-hS3rm_Wlc,1153
178
+ fast_agent/resources/examples/workflows/short_story.txt,sha256=X3y_1AyhLFN2AKzCKvucJtDgAFIJfnlbsbGZO5bBWu0,1187
179
+ fast_agent/resources/setup/.gitignore,sha256=UQKYvhK6samGg5JZg613XiuGUkUAz2qzE1WfFa8J0mQ,245
180
+ fast_agent/resources/setup/agent.py,sha256=co2lm190iQqOlRhup78X5BKHSB-RqLn3tZdxh2yaGhA,422
181
+ fast_agent/resources/setup/fastagent.config.yaml,sha256=JpezZSP5-ybUlZJaeQG1EoUONXmzmDhdAR6JIpbb-jA,1356
182
+ fast_agent/resources/setup/fastagent.secrets.yaml.example,sha256=ht-i2_SpAyeXG2OnG_vOA1n7gRsGIInxp9g5Nio-jpI,1038
183
+ fast_agent/resources/setup/pyproject.toml.tmpl,sha256=b_dL9TBAzA4sPOkVZd3psMKFT-g_gef0n2NcANojEqs,343
184
+ fast_agent/tools/elicitation.py,sha256=8FaNvuN__LAM328VSJ5T4Bg3m8auHraqYvIYv6Eh4KU,13464
185
+ fast_agent/types/__init__.py,sha256=IpUWlzx3u_3h99F2IKJ8aPjyGZXguOwkOVJKGrst6hg,951
186
+ fast_agent/types/llm_stop_reason.py,sha256=bWe97OfhALUe8uQeAQOnTdPlYzJiabIfo8u38kPgj3Q,2293
187
+ fast_agent/ui/__init__.py,sha256=MXxTQjFdF7mI_3JHxBPd-aoZYLlxV_-51-Trqgv5-3w,1104
188
+ fast_agent/ui/console.py,sha256=Gjf2QLFumwG1Lav__c07X_kZxxEUSkzV-1_-YbAwcwo,813
189
+ fast_agent/ui/console_display.py,sha256=x_0pmQgMAasfUfv_MwoGJyXSwT7y-BxPGWJWGblSSJQ,40367
190
+ fast_agent/ui/elicitation_form.py,sha256=t3UhBG44YmxTLu1RjCnHwW36eQQaroE45CiBGJB2czg,29410
191
+ fast_agent/ui/elicitation_style.py,sha256=rtZiJH4CwTdkDLSzDDvThlZyIyuRX0oVNzscKiHvry8,3835
192
+ fast_agent/ui/enhanced_prompt.py,sha256=w99sJkdAn2WVtIT9hLumhz1DQY-H9a0Qq80JSM0jRg8,40080
193
+ fast_agent/ui/interactive_prompt.py,sha256=lxY26PNBNihtccO4iI7CxIag_9CxEcbajbIPdzqnEcM,43230
194
+ fast_agent/ui/mcp_ui_utils.py,sha256=UVX-VZI7PaJ8JlYuWsletml4K3XrUGUFRn4lqFwsAWg,8099
195
+ fast_agent/ui/mermaid_utils.py,sha256=MpcRyVCPMTwU1XeIxnyFg0fQLjcyXZduWRF8NhEqvXE,5332
196
+ fast_agent/ui/progress_display.py,sha256=hajDob65PttiJ2mPS6FsCtnmTcnyvDWGn-UqQboXqkQ,361
197
+ fast_agent/ui/rich_progress.py,sha256=vMeDD5cybsPf_0IjOM98U8TVaE_yYIOKZa8JnRgTYUo,7451
198
+ fast_agent/ui/usage_display.py,sha256=ltJpn_sDzo8PDNSXWx-QdEUbQWUnhmajCItNt5mA5rM,7285
199
+ fast_agent_mcp-0.3.1.dist-info/METADATA,sha256=PDf70TWXzCOk8dgPOwDBlb7v5yO8hb8-cQb-h6YgG_4,30462
200
+ fast_agent_mcp-0.3.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
201
+ fast_agent_mcp-0.3.1.dist-info/entry_points.txt,sha256=i6Ujja9J-hRxttOKqTYdbYP_tyaS4gLHg53vupoCSsg,199
202
+ fast_agent_mcp-0.3.1.dist-info/licenses/LICENSE,sha256=Gx1L3axA4PnuK4FxsbX87jQ1opoOkSFfHHSytW6wLUU,10935
203
+ fast_agent_mcp-0.3.1.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ [console_scripts]
2
+ fast-agent = fast_agent.cli.__main__:main
3
+ fast-agent-mcp = fast_agent.cli.__main__:main
4
+ fastagent = fast_agent.cli.__main__:app
5
+ prompt-server = fast_agent.mcp.prompts.__main__:main