fast-agent-mcp 0.3.4__py3-none-any.whl → 0.3.6__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.

@@ -26,6 +26,7 @@ class MessageType(Enum):
26
26
 
27
27
  USER = "user"
28
28
  ASSISTANT = "assistant"
29
+ SYSTEM = "system"
29
30
  TOOL_CALL = "tool_call"
30
31
  TOOL_RESULT = "tool_result"
31
32
 
@@ -44,6 +45,12 @@ MESSAGE_CONFIGS = {
44
45
  "arrow_style": "dim green",
45
46
  "highlight_color": "bright_green",
46
47
  },
48
+ MessageType.SYSTEM: {
49
+ "block_color": "yellow",
50
+ "arrow": "●",
51
+ "arrow_style": "dim yellow",
52
+ "highlight_color": "bright_yellow",
53
+ },
47
54
  MessageType.TOOL_CALL: {
48
55
  "block_color": "magenta",
49
56
  "arrow": "◀",
@@ -144,7 +151,7 @@ class ConsoleDisplay:
144
151
  name: str | None = None,
145
152
  right_info: str = "",
146
153
  bottom_metadata: List[str] | None = None,
147
- highlight_items: str | List[str] | None = None,
154
+ highlight_index: int | None = None,
148
155
  max_item_length: int | None = None,
149
156
  is_error: bool = False,
150
157
  truncate_content: bool = True,
@@ -159,7 +166,7 @@ class ConsoleDisplay:
159
166
  name: Optional name to display (agent name, user name, etc.)
160
167
  right_info: Information to display on the right side of the header
161
168
  bottom_metadata: Optional list of items for bottom separator
162
- highlight_items: Item(s) to highlight in bottom metadata
169
+ highlight_index: Index of item to highlight in bottom metadata (0-based), or None
163
170
  max_item_length: Optional max length for bottom metadata items (with ellipsis)
164
171
  is_error: For tool results, whether this is an error (uses red color)
165
172
  truncate_content: Whether to truncate long content
@@ -199,16 +206,6 @@ class ConsoleDisplay:
199
206
  if max_item_length:
200
207
  display_items = self._shorten_items(bottom_metadata, max_item_length)
201
208
 
202
- # Normalize highlight_items
203
- if highlight_items is None:
204
- highlight_items = []
205
- elif isinstance(highlight_items, str):
206
- highlight_items = [highlight_items]
207
-
208
- # Shorten highlight items to match if we shortened display items
209
- if max_item_length:
210
- highlight_items = self._shorten_items(highlight_items, max_item_length)
211
-
212
209
  # Format the metadata with highlighting, clipped to available width
213
210
  # Compute available width for the metadata segment (excluding the fixed prefix/suffix)
214
211
  total_width = console.console.size.width
@@ -220,7 +217,7 @@ class ConsoleDisplay:
220
217
 
221
218
  metadata_text = self._format_bottom_metadata(
222
219
  display_items,
223
- highlight_items,
220
+ highlight_index,
224
221
  config["highlight_color"],
225
222
  max_width=available,
226
223
  )
@@ -268,11 +265,11 @@ class ConsoleDisplay:
268
265
  from fast_agent.mcp.helpers.content_helpers import get_text, is_text_content
269
266
 
270
267
  # Determine the style based on message type
271
- # USER and ASSISTANT messages should display in normal style
268
+ # USER, ASSISTANT, and SYSTEM messages should display in normal style
272
269
  # TOOL_CALL and TOOL_RESULT should be dimmed
273
270
  if is_error:
274
271
  style = "dim red"
275
- elif message_type in [MessageType.USER, MessageType.ASSISTANT]:
272
+ elif message_type in [MessageType.USER, MessageType.ASSISTANT, MessageType.SYSTEM]:
276
273
  style = None # No style means default/normal white
277
274
  else:
278
275
  style = "dim"
@@ -464,7 +461,7 @@ class ConsoleDisplay:
464
461
  def _format_bottom_metadata(
465
462
  self,
466
463
  items: List[str],
467
- highlight_items: List[str],
464
+ highlight_index: int | None,
468
465
  highlight_color: str,
469
466
  max_width: int | None = None,
470
467
  ) -> Text:
@@ -473,8 +470,9 @@ class ConsoleDisplay:
473
470
 
474
471
  Args:
475
472
  items: List of items to display
476
- highlight_items: List of items to highlight
473
+ highlight_index: Index of item to highlight (0-based), or None for no highlighting
477
474
  highlight_color: Color to use for highlighting
475
+ max_width: Maximum width for the formatted text
478
476
 
479
477
  Returns:
480
478
  Formatted Text object with proper separators and highlighting
@@ -491,14 +489,7 @@ class ConsoleDisplay:
491
489
  sep = Text(" | ", style="dim") if i > 0 else Text("")
492
490
 
493
491
  # Prepare item text with potential highlighting
494
- should_highlight = False
495
- if item in highlight_items:
496
- should_highlight = True
497
- else:
498
- for highlight in highlight_items:
499
- if item.startswith(highlight) or highlight.endswith(item):
500
- should_highlight = True
501
- break
492
+ should_highlight = highlight_index is not None and i == highlight_index
502
493
 
503
494
  item_text = Text(item, style=(highlight_color if should_highlight else "dim"))
504
495
 
@@ -569,7 +560,7 @@ class ConsoleDisplay:
569
560
  tool_name: str,
570
561
  tool_args: Dict[str, Any] | None,
571
562
  bottom_items: List[str] | None = None,
572
- highlight_items: str | List[str] | None = None,
563
+ highlight_index: int | None = None,
573
564
  max_item_length: int | None = None,
574
565
  name: str | None = None,
575
566
  ) -> None:
@@ -579,7 +570,7 @@ class ConsoleDisplay:
579
570
  tool_name: Name of the tool being called
580
571
  tool_args: Arguments being passed to the tool
581
572
  bottom_items: Optional list of items for bottom separator (e.g., available tools)
582
- highlight_items: Item(s) to highlight in the bottom separator
573
+ highlight_index: Index of item to highlight in the bottom separator (0-based), or None
583
574
  max_item_length: Optional max length for bottom items (with ellipsis)
584
575
  name: Optional agent name
585
576
  """
@@ -596,7 +587,7 @@ class ConsoleDisplay:
596
587
  name=name,
597
588
  right_info=right_info,
598
589
  bottom_metadata=bottom_items,
599
- highlight_items=tool_name,
590
+ highlight_index=highlight_index,
600
591
  max_item_length=max_item_length,
601
592
  truncate_content=True,
602
593
  )
@@ -683,7 +674,7 @@ class ConsoleDisplay:
683
674
  self,
684
675
  message_text: Union[str, Text, "PromptMessageExtended"],
685
676
  bottom_items: List[str] | None = None,
686
- highlight_items: str | List[str] | None = None,
677
+ highlight_index: int | None = None,
687
678
  max_item_length: int | None = None,
688
679
  name: str | None = None,
689
680
  model: str | None = None,
@@ -694,7 +685,7 @@ class ConsoleDisplay:
694
685
  Args:
695
686
  message_text: The message content to display (str, Text, or PromptMessageExtended)
696
687
  bottom_items: Optional list of items for bottom separator (e.g., servers, destinations)
697
- highlight_items: Item(s) to highlight in the bottom separator
688
+ highlight_index: Index of item to highlight in the bottom separator (0-based), or None
698
689
  max_item_length: Optional max length for bottom items (with ellipsis)
699
690
  title: Title for the message (default "ASSISTANT")
700
691
  name: Optional agent name
@@ -722,7 +713,7 @@ class ConsoleDisplay:
722
713
  name=name,
723
714
  right_info=right_info,
724
715
  bottom_metadata=bottom_items,
725
- highlight_items=highlight_items,
716
+ highlight_index=highlight_index,
726
717
  max_item_length=max_item_length,
727
718
  truncate_content=False, # Assistant messages shouldn't be truncated
728
719
  additional_message=additional_message,
@@ -816,6 +807,32 @@ class ConsoleDisplay:
816
807
  truncate_content=False, # User messages typically shouldn't be truncated
817
808
  )
818
809
 
810
+ def show_system_message(
811
+ self,
812
+ system_prompt: str,
813
+ agent_name: str | None = None,
814
+ server_count: int = 0,
815
+ ) -> None:
816
+ """Display the system prompt in a formatted panel."""
817
+ if not self.config or not self.config.logger.show_chat:
818
+ return
819
+
820
+ # Build right side info
821
+ right_parts = []
822
+ if server_count > 0:
823
+ server_word = "server" if server_count == 1 else "servers"
824
+ right_parts.append(f"{server_count} MCP {server_word}")
825
+
826
+ right_info = f"[dim]{' '.join(right_parts)}[/dim]" if right_parts else ""
827
+
828
+ self.display_message(
829
+ content=system_prompt,
830
+ message_type=MessageType.SYSTEM,
831
+ name=agent_name,
832
+ right_info=right_info,
833
+ truncate_content=False, # Don't truncate system prompts
834
+ )
835
+
819
836
  async def show_prompt_loaded(
820
837
  self,
821
838
  prompt_name: str,
@@ -297,6 +297,7 @@ class AgentCompleter(Completer):
297
297
  "tools": "List available MCP tools",
298
298
  "prompt": "List and choose MCP prompts, or apply specific prompt (/prompt <name>)",
299
299
  "agents": "List available agents",
300
+ "system": "Show the current system prompt",
300
301
  "usage": "Show current usage statistics",
301
302
  "markdown": "Show last assistant message without markdown formatting",
302
303
  "save_history": "Save history; .json = MCP JSON, others = Markdown",
@@ -751,6 +752,8 @@ async def get_enhanced_input(
751
752
  return "CLEAR"
752
753
  elif cmd == "agents":
753
754
  return "LIST_AGENTS"
755
+ elif cmd == "system":
756
+ return "SHOW_SYSTEM"
754
757
  elif cmd == "usage":
755
758
  return "SHOW_USAGE"
756
759
  elif cmd == "markdown":
@@ -933,6 +936,7 @@ async def handle_special_commands(command, agent_app=None):
933
936
  rich_print(" /help - Show this help")
934
937
  rich_print(" /clear - Clear screen")
935
938
  rich_print(" /agents - List available agents")
939
+ rich_print(" /system - Show the current system prompt")
936
940
  rich_print(" /prompt <name> - Apply a specific prompt by name")
937
941
  rich_print(" /usage - Show current usage statistics")
938
942
  rich_print(" /markdown - Show last assistant message without markdown formatting")
@@ -972,6 +976,10 @@ async def handle_special_commands(command, agent_app=None):
972
976
  # Return a dictionary to signal that usage should be shown
973
977
  return {"show_usage": True}
974
978
 
979
+ elif command == "SHOW_SYSTEM":
980
+ # Return a dictionary to signal that system prompt should be shown
981
+ return {"show_system": True}
982
+
975
983
  elif command == "MARKDOWN":
976
984
  # Return a dictionary to signal that markdown display should be shown
977
985
  return {"show_markdown": True}
@@ -197,6 +197,10 @@ class InteractivePrompt:
197
197
  # Handle usage display
198
198
  await self._show_usage(prompt_provider, agent)
199
199
  continue
200
+ elif "show_system" in command_result:
201
+ # Handle system prompt display
202
+ await self._show_system(prompt_provider, agent)
203
+ continue
200
204
  elif "show_markdown" in command_result:
201
205
  # Handle markdown display
202
206
  await self._show_markdown(prompt_provider, agent)
@@ -926,6 +930,56 @@ class InteractivePrompt:
926
930
  except Exception as e:
927
931
  rich_print(f"[red]Error showing usage: {e}[/red]")
928
932
 
933
+ async def _show_system(self, prompt_provider: PromptProvider, agent_name: str) -> None:
934
+ """
935
+ Show the current system prompt for the agent.
936
+
937
+ Args:
938
+ prompt_provider: Provider that has access to agents
939
+ agent_name: Name of the current agent
940
+ """
941
+ try:
942
+ # Get agent to display from
943
+ assert hasattr(prompt_provider, "_agent"), (
944
+ "Interactive prompt expects an AgentApp with _agent()"
945
+ )
946
+ agent = prompt_provider._agent(agent_name)
947
+
948
+ # Get the system prompt
949
+ system_prompt = getattr(agent, 'instruction', None)
950
+ if not system_prompt:
951
+ rich_print("[yellow]No system prompt available[/yellow]")
952
+ return
953
+
954
+ # Get server count for display
955
+ server_count = 0
956
+ if hasattr(agent, "_aggregator") and hasattr(agent._aggregator, "server_names"):
957
+ server_count = (
958
+ len(agent._aggregator.server_names) if agent._aggregator.server_names else 0
959
+ )
960
+
961
+ # Use the display utility to show the system prompt
962
+ if hasattr(agent, 'display') and agent.display:
963
+ agent.display.show_system_message(
964
+ system_prompt=system_prompt,
965
+ agent_name=agent_name,
966
+ server_count=server_count
967
+ )
968
+ else:
969
+ # Fallback to basic display
970
+ from fast_agent.ui.console_display import ConsoleDisplay
971
+ display = ConsoleDisplay(config=agent.context.config if hasattr(agent, 'context') else None)
972
+ display.show_system_message(
973
+ system_prompt=system_prompt,
974
+ agent_name=agent_name,
975
+ server_count=server_count
976
+ )
977
+
978
+ except Exception as e:
979
+ import traceback
980
+ rich_print(f"[red]Error showing system prompt: {e}[/red]")
981
+ rich_print(f"[dim]{traceback.format_exc()}[/dim]")
982
+
929
983
  async def _show_markdown(self, prompt_provider: PromptProvider, agent_name: str) -> None:
930
984
  """
931
985
  Show the last assistant message without markdown formatting.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fast-agent-mcp
3
- Version: 0.3.4
3
+ Version: 0.3.6
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,7 +208,7 @@ 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.7
211
+ Requires-Python: >=3.13.5
212
212
  Requires-Dist: a2a-sdk>=0.3.0
213
213
  Requires-Dist: aiohttp>=3.11.13
214
214
  Requires-Dist: anthropic>=0.66.0
@@ -218,6 +218,7 @@ Requires-Dist: deprecated>=1.2.18
218
218
  Requires-Dist: email-validator>=2.2.0
219
219
  Requires-Dist: fastapi>=0.115.6
220
220
  Requires-Dist: google-genai>=1.33.0
221
+ Requires-Dist: keyring>=24.3.1
221
222
  Requires-Dist: mcp==1.14.0
222
223
  Requires-Dist: openai>=1.106.1
223
224
  Requires-Dist: opentelemetry-distro>=0.55b0
@@ -380,6 +381,42 @@ uv run workflow/chaining.py --agent post_writer --message "<url>"
380
381
 
381
382
  Add the `--quiet` switch to disable progress and message display and return only the final response - useful for simple automations.
382
383
 
384
+ ## MCP OAuth (v2.1)
385
+
386
+ For SSE and HTTP MCP servers, OAuth is enabled by default with minimal configuration. A local callback server is used to capture the authorization code, with a paste-URL fallback if the port is unavailable.
387
+
388
+ - Minimal per-server settings in `fastagent.config.yaml`:
389
+
390
+ ```yaml
391
+ mcp:
392
+ servers:
393
+ myserver:
394
+ transport: http # or sse
395
+ url: http://localhost:8001/mcp # or /sse for SSE servers
396
+ auth:
397
+ oauth: true # default: true
398
+ redirect_port: 3030 # default: 3030
399
+ redirect_path: /callback # default: /callback
400
+ # scope: "user" # optional; if omitted, server defaults are used
401
+ ```
402
+
403
+ - The OAuth client uses PKCE and in-memory token storage (no tokens written to disk).
404
+ - Token persistence: by default, tokens are stored securely in your OS keychain via `keyring`. If a keychain is unavailable (e.g., headless container), in-memory storage is used for the session.
405
+ - To force in-memory only per server, set:
406
+
407
+ ```yaml
408
+ mcp:
409
+ servers:
410
+ myserver:
411
+ transport: http
412
+ url: http://localhost:8001/mcp
413
+ auth:
414
+ oauth: true
415
+ persist: memory
416
+ ```
417
+
418
+ - To disable OAuth for a specific server , set `auth.oauth: false` for that server.
419
+
383
420
  ## Workflows
384
421
 
385
422
  ### Chain
@@ -1,5 +1,5 @@
1
1
  fast_agent/__init__.py,sha256=zPSMngBIvbBYyu3jxZp-edxfOBWxCX7YlceMdlqvt9I,3795
2
- fast_agent/config.py,sha256=URvQMiMlkXd3tImXQpiHVX5wrbzPQF6Aks-WoGGPQkM,20176
2
+ fast_agent/config.py,sha256=5glgvbPcPZFGG6UG_P8hByryPrteqrYg4pUCep4x6s8,22509
3
3
  fast_agent/constants.py,sha256=d5EMSO2msRkjRFz8MgnnhpMnO3woqKP0EcQ4b_yI60w,235
4
4
  fast_agent/context.py,sha256=nBelOqehSH91z3aG2nYhwETP-biRzz-iuA2fqmKdHP8,7700
5
5
  fast_agent/context_dependent.py,sha256=KU1eydVBoIt4bYOZroqxDgE1AUexDaZi7hurE26QsF4,1584
@@ -9,27 +9,28 @@ fast_agent/mcp_server_registry.py,sha256=TDCNpQIehsh1PK4y7AWp_rkQMcwYx7FaouUbK3k
9
9
  fast_agent/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
10
  fast_agent/agents/__init__.py,sha256=WfgtR9MgmJUJI7rb-CUH_10s7308LjxYIYzJRIBZ_9Y,2644
11
11
  fast_agent/agents/agent_types.py,sha256=ugolD3lC2KxSfBYjjRf9HjNATZaFx1o4Fhjb15huSgk,1776
12
- fast_agent/agents/llm_agent.py,sha256=iuy3kO5Q-f9bm3tjYLG2Wurd0gK2sLhTfTkSnfVWzSw,8311
12
+ fast_agent/agents/llm_agent.py,sha256=deb6cOLKzebW3mZJ3uyingwIFIwVbTpVVvTV2HGel9g,8884
13
13
  fast_agent/agents/llm_decorator.py,sha256=IhvMOZVjo1qT4GII0KP000VYTCprzBQBGZPbZwBIEd0,16485
14
- fast_agent/agents/mcp_agent.py,sha256=BMSTcGd9_SdoyEGNGVAWXu8ubaE1TAeAMl-2c_wymQU,35240
15
- fast_agent/agents/tool_agent.py,sha256=owGcc1an9P8jb8ZfNYjCsLK6lv85IL7friWcSbZxMIo,6717
14
+ fast_agent/agents/mcp_agent.py,sha256=Zr3XxhUKxcGMSiawgQHLpajJtsc2CJYKUe9IUzNmYkQ,38115
15
+ fast_agent/agents/tool_agent.py,sha256=HAqNCftDlzjDuQGJjvsR4ZEmDX4aLG6YoaJ9ZGfXCBs,7082
16
16
  fast_agent/agents/workflow/chain_agent.py,sha256=Pd8dOH_YdKu3LXsKa4fwqzY_B2qVuhzdfCUiKi5v17s,6293
17
17
  fast_agent/agents/workflow/evaluator_optimizer.py,sha256=rhzazy8Aj-ydId6kmBC77TmtYZ5mirSe7eV6PPMWkBA,12040
18
18
  fast_agent/agents/workflow/iterative_planner.py,sha256=CTtDpK-YGrFFZMQQmFeE-2I_9-cZv23pNwUoh8w5voA,20478
19
19
  fast_agent/agents/workflow/orchestrator_models.py,sha256=VNnnVegnjimgiuL8ZhxkBPhg8tjbeJRGq2JAIl0FAbU,7216
20
20
  fast_agent/agents/workflow/orchestrator_prompts.py,sha256=EXKEI174sshkZyPPEnWbwwNafzSPuA39MXL7iqG9cWc,9106
21
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
22
+ fast_agent/agents/workflow/router_agent.py,sha256=4jL7AM9FcOvsuf0BSWs-r17xa9vMml0BuF89PiFeVQs,11345
23
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=H3brvpmDGE0g4WCJc2-volADCjpPmh7cSjedSfzqfOQ,4242
24
+ fast_agent/cli/__main__.py,sha256=iF9mNX1ja9Ea9T6gzNg9nfYAuei_vRowfHpUPiFbJVI,1260
25
+ fast_agent/cli/constants.py,sha256=flYDsml3_8wVcGg7T1t5mPFT9CC1M-XMjBigXjX6PuI,559
26
+ fast_agent/cli/main.py,sha256=tERbfQjure3kgKYqzZCNDSLyiVZGXCH2coZ8YBwvq64,4398
27
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=o9fT8161dDtLP2F0gWrndzitlPO7q7zvdeRoqs0PavE,15079
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
28
+ fast_agent/cli/commands/auth.py,sha256=JlRT1iHDgF0fPmkbaoiLTm2cTO-qI9KZtrO3wppIVcg,14639
29
+ fast_agent/cli/commands/check_config.py,sha256=D0emHGl6yc9XRq-HjAwS4KfS7a9r5gkA55MyiIRptGQ,26638
30
+ fast_agent/cli/commands/go.py,sha256=yI-VAc2FVm5S5kCP_-i4cVCkwprz0zt_l6KyBam6V7U,15178
31
+ fast_agent/cli/commands/quickstart.py,sha256=CiSen7VxmKDy7apJZ8rAyC33-BIo0zsUt8cBnEtxg0Y,21241
32
+ fast_agent/cli/commands/server_helpers.py,sha256=Nuded8sZb4Rybwoq5LbXXUgwtJZg-OO04xhmPUp6e98,4073
33
+ fast_agent/cli/commands/setup.py,sha256=n5hVjXkKTmuiW8-0ezItVcMHJ92W6NlE2JOGCYiKw0A,6388
33
34
  fast_agent/cli/commands/url_parser.py,sha256=v9KoprPBEEST5Fo7qXgbW50GC5vMpxFteKqAT6mFkdI,5991
34
35
  fast_agent/core/__init__.py,sha256=n2ly7SBtFko9H2DPVh8cSqfw9chtiUaokxLmiDpaMyU,2233
35
36
  fast_agent/core/agent_app.py,sha256=cdzNwpb--SUNYbhkUX6RolqVnxJ5WSchxw5I4gFrvpk,16836
@@ -103,10 +104,11 @@ fast_agent/mcp/hf_auth.py,sha256=ndDvR7E9LCc5dBiMsStFXtvvX9lYrL-edCq_qJw4lDw,447
103
104
  fast_agent/mcp/interfaces.py,sha256=xCWONGXe4uQSmmBlMZRD3mflPegTJnz2caVNihEl3ok,2411
104
105
  fast_agent/mcp/logger_textio.py,sha256=4YLVXlXghdGm1s_qp1VoAWEX_eWufBfD2iD7l08yoak,3170
105
106
  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
107
+ fast_agent/mcp/mcp_aggregator.py,sha256=rrFzPV3keHJkc04Y_6x4S0ZNmhjwdp6jfE0dflHGpXY,54655
108
+ fast_agent/mcp/mcp_connection_manager.py,sha256=uhQqbOP2_LHDMEgrh1-yvGpueloYVbylvAj-pjYCboA,20247
108
109
  fast_agent/mcp/mcp_content.py,sha256=F9bgJ57EO9sgWg1m-eTNM6xd9js79mHKf4e9O8K8jrI,8829
109
110
  fast_agent/mcp/mime_utils.py,sha256=D6YXNdZJ351BjacSW5o0sVF_hrWuRHD6UyWS4TDlLZI,2915
111
+ fast_agent/mcp/oauth_client.py,sha256=3shN3iwsJNXrk7nbcfUgrzNos3i2RuMuLXA80nR8r6Y,17104
110
112
  fast_agent/mcp/prompt.py,sha256=U3jAIjGyGqCpS96zKf0idC7PI4YdFHq-3qjpCsEybxQ,5983
111
113
  fast_agent/mcp/prompt_message_extended.py,sha256=-sw6FITvN0rTeIVWDUslNTPYyFEieToydOAf1-phQLs,4650
112
114
  fast_agent/mcp/prompt_render.py,sha256=AqDaQqM6kqciV9X79S5rsRr3VjcQ_2JOiLaHqpRzsS4,2888
@@ -176,28 +178,28 @@ fast_agent/resources/examples/workflows/parallel.py,sha256=kROiRueTm0Wql4EWVjFSy
176
178
  fast_agent/resources/examples/workflows/router.py,sha256=lxMxz6g0_XjYnwzEwKdl9l2hxRsD4PSsaIlhH5nLuQY,2075
177
179
  fast_agent/resources/examples/workflows/short_story.md,sha256=XN9I2kzCcMmke3dE5F2lyRH5iFUZUQ8Sy-hS3rm_Wlc,1153
178
180
  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=cRQfWFkWJxF1TkWASXf8nuHbIDUgyk5o23vyoroSBOY,407
181
- fast_agent/resources/setup/fastagent.config.yaml,sha256=6X4wywcThmaIyX7yayr0bTAl1AavYqF_T3UVbyyqTPI,1464
181
+ fast_agent/resources/setup/.gitignore,sha256=bksf0bkvBXtm3F5Nd4F9FB2LaO2RcTbHujYWjq5JKPo,305
182
+ fast_agent/resources/setup/agent.py,sha256=IlZecsc9vTtH2rj9BFF4M6BUgClg5fQ2HasYV1PPIHA,518
183
+ fast_agent/resources/setup/fastagent.config.yaml,sha256=GoXfrLXolMjl9oqam5lodzm40OmZDOkng99BSSP26pY,1446
182
184
  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
185
+ fast_agent/resources/setup/pyproject.toml.tmpl,sha256=SxyVPXbtD67yFOx9wIrzq6Yxo4W2PkSR1rrnPkmpjwA,478
184
186
  fast_agent/tools/elicitation.py,sha256=8FaNvuN__LAM328VSJ5T4Bg3m8auHraqYvIYv6Eh4KU,13464
185
187
  fast_agent/types/__init__.py,sha256=IpUWlzx3u_3h99F2IKJ8aPjyGZXguOwkOVJKGrst6hg,951
186
188
  fast_agent/types/llm_stop_reason.py,sha256=bWe97OfhALUe8uQeAQOnTdPlYzJiabIfo8u38kPgj3Q,2293
187
189
  fast_agent/ui/__init__.py,sha256=MXxTQjFdF7mI_3JHxBPd-aoZYLlxV_-51-Trqgv5-3w,1104
188
190
  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
191
+ fast_agent/ui/console_display.py,sha256=gzSehwK-6b5Y1amflnhocTWtuRtIjoS990qChR6O8oA,40922
190
192
  fast_agent/ui/elicitation_form.py,sha256=t3UhBG44YmxTLu1RjCnHwW36eQQaroE45CiBGJB2czg,29410
191
193
  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/enhanced_prompt.py,sha256=a7XYq8sef7PoIBW0o40ihzumTENp1nr2jFsG8s2R6D4,40427
195
+ fast_agent/ui/interactive_prompt.py,sha256=ZW-bCFtsJoD8InWHgJ2ibTK9OjhaA-39-RYIocDV9XY,45516
194
196
  fast_agent/ui/mcp_ui_utils.py,sha256=hV7z-yHX86BgdH6CMmN5qyOUjyiegQXLJOa5n5A1vQs,8476
195
197
  fast_agent/ui/mermaid_utils.py,sha256=MpcRyVCPMTwU1XeIxnyFg0fQLjcyXZduWRF8NhEqvXE,5332
196
198
  fast_agent/ui/progress_display.py,sha256=hajDob65PttiJ2mPS6FsCtnmTcnyvDWGn-UqQboXqkQ,361
197
199
  fast_agent/ui/rich_progress.py,sha256=jy6VuUOYFkWXdyvnRTSBPAmmNAP6TJDFw_lgbt_YYLo,7548
198
200
  fast_agent/ui/usage_display.py,sha256=ltJpn_sDzo8PDNSXWx-QdEUbQWUnhmajCItNt5mA5rM,7285
199
- fast_agent_mcp-0.3.4.dist-info/METADATA,sha256=g7siNgLm38P10584TCI_XYthtE4ThNMoTfHFxG6VWg0,30447
200
- fast_agent_mcp-0.3.4.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
201
- fast_agent_mcp-0.3.4.dist-info/entry_points.txt,sha256=i6Ujja9J-hRxttOKqTYdbYP_tyaS4gLHg53vupoCSsg,199
202
- fast_agent_mcp-0.3.4.dist-info/licenses/LICENSE,sha256=Gx1L3axA4PnuK4FxsbX87jQ1opoOkSFfHHSytW6wLUU,10935
203
- fast_agent_mcp-0.3.4.dist-info/RECORD,,
201
+ fast_agent_mcp-0.3.6.dist-info/METADATA,sha256=BqwJzI5karZB_iUusd69TKvh1Rg4Ja813Lb_E6biljM,31696
202
+ fast_agent_mcp-0.3.6.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
203
+ fast_agent_mcp-0.3.6.dist-info/entry_points.txt,sha256=i6Ujja9J-hRxttOKqTYdbYP_tyaS4gLHg53vupoCSsg,199
204
+ fast_agent_mcp-0.3.6.dist-info/licenses/LICENSE,sha256=Gx1L3axA4PnuK4FxsbX87jQ1opoOkSFfHHSytW6wLUU,10935
205
+ fast_agent_mcp-0.3.6.dist-info/RECORD,,