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

@@ -19,12 +19,12 @@ class Colours:
19
19
  """Color constants for MCP status display elements."""
20
20
 
21
21
  # Timeline activity colors (Option A: Mixed Intensity)
22
- ERROR = "bright_red" # Keep error bright
23
- DISABLED = "bright_blue" # Keep disabled bright
24
- RESPONSE = "blue" # Normal blue instead of bright
25
- REQUEST = "yellow" # Normal yellow instead of bright
26
- NOTIFICATION = "cyan" # Normal cyan instead of bright
27
- PING = "dim green" # Keep ping dim
22
+ ERROR = "bright_red" # Keep error bright
23
+ DISABLED = "bright_blue" # Keep disabled bright
24
+ RESPONSE = "blue" # Normal blue instead of bright
25
+ REQUEST = "yellow" # Normal yellow instead of bright
26
+ NOTIFICATION = "cyan" # Normal cyan instead of bright
27
+ PING = "dim green" # Keep ping dim
28
28
  IDLE = "white dim"
29
29
  NONE = "dim"
30
30
 
@@ -195,7 +195,7 @@ def _format_capability_shorthand(
195
195
  entries.append(("Ro", False, False))
196
196
 
197
197
  mode = (status.elicitation_mode or "").lower()
198
- if mode == "auto_cancel":
198
+ if mode == "auto-cancel":
199
199
  entries.append(("El", "red", False))
200
200
  elif mode and mode != "none":
201
201
  entries.append(("El", True, False))
@@ -405,7 +405,24 @@ def _render_channel_summary(status: ServerStatus, indent: str, total_width: int)
405
405
  else:
406
406
  display_arrow = arrow
407
407
  line.append(display_arrow, style=arrow_style)
408
- line.append(f" {label:<13}", style=Colours.TEXT_DEFAULT)
408
+
409
+ # Determine label style based on activity and special cases
410
+ if not channel:
411
+ # No channel = dim
412
+ label_style = Colours.TEXT_DIM
413
+ elif channel.last_status_code == 405 and "GET" in label:
414
+ # Special case: GET (SSE) with 405 = dim (hollow arrow already handled above)
415
+ label_style = Colours.TEXT_DIM
416
+ elif arrow_style == Colours.ARROW_ERROR and "GET" in label:
417
+ # Highlight GET stream errors in red to match the arrow indicator
418
+ label_style = Colours.TEXT_ERROR
419
+ elif channel.request_count == 0 and channel.response_count == 0:
420
+ # No activity = dim
421
+ label_style = Colours.TEXT_DIM
422
+ else:
423
+ # Has activity = normal
424
+ label_style = Colours.TEXT_DEFAULT
425
+ line.append(f" {label:<13}", style=label_style)
409
426
 
410
427
  # Always show timeline (dim black dots if no data)
411
428
  line.append("10m ", style="dim")
@@ -415,6 +432,9 @@ def _render_channel_summary(status: ServerStatus, indent: str, total_width: int)
415
432
  color = timeline_color_map.get(bucket_state, "dim")
416
433
  if bucket_state in {"idle", "none"}:
417
434
  symbol = "·"
435
+ elif is_stdio:
436
+ # For STDIO, all activity shows as filled circles since types are combined
437
+ symbol = "●"
418
438
  elif bucket_state == "request":
419
439
  symbol = "◆" # Diamond for requests - rare and important
420
440
  else:
@@ -442,9 +462,9 @@ def _render_channel_summary(status: ServerStatus, indent: str, total_width: int)
442
462
  # Show "-" for shut/disabled channels (405, off, disabled states)
443
463
  channel_state = (channel.state or "open").lower()
444
464
  is_shut = (
445
- channel.last_status_code == 405 or
446
- channel_state in {"off", "disabled"} or
447
- (channel_state == "error" and channel.last_status_code == 405)
465
+ channel.last_status_code == 405
466
+ or channel_state in {"off", "disabled"}
467
+ or (channel_state == "error" and channel.last_status_code == 405)
448
468
  )
449
469
 
450
470
  if is_shut:
@@ -0,0 +1,206 @@
1
+ """
2
+ Enhanced notification tracker for prompt_toolkit toolbar display.
3
+ Tracks both active events (sampling/elicitation) and completed notifications.
4
+ """
5
+
6
+ from datetime import datetime
7
+ from typing import Dict, List, Optional
8
+
9
+ # Display metadata for toolbar summaries (singular, plural, compact label)
10
+ _EVENT_ORDER = ("tool_update", "sampling", "elicitation")
11
+ _EVENT_DISPLAY = {
12
+ "tool_update": {"singular": "tool update", "plural": "tool updates", "compact": "tool"},
13
+ "sampling": {"singular": "sample", "plural": "samples", "compact": "samp"},
14
+ "elicitation": {"singular": "elicitation", "plural": "elicitations", "compact": "elic"},
15
+ }
16
+
17
+ # Active events currently in progress
18
+ active_events: Dict[str, Dict[str, str]] = {}
19
+
20
+ # Completed notifications history
21
+ notifications: List[Dict[str, str]] = []
22
+
23
+
24
+ def add_tool_update(server_name: str) -> None:
25
+ """Add a tool update notification.
26
+
27
+ Args:
28
+ server_name: Name of the server that had tools updated
29
+ """
30
+ notifications.append({
31
+ 'type': 'tool_update',
32
+ 'server': server_name
33
+ })
34
+
35
+
36
+ def start_sampling(server_name: str) -> None:
37
+ """Start tracking a sampling operation.
38
+
39
+ Args:
40
+ server_name: Name of the server making the sampling request
41
+ """
42
+ active_events['sampling'] = {
43
+ 'server': server_name,
44
+ 'start_time': datetime.now().isoformat()
45
+ }
46
+
47
+ # Force prompt_toolkit to redraw if active
48
+ try:
49
+ from prompt_toolkit.application.current import get_app
50
+ get_app().invalidate()
51
+ except Exception:
52
+ pass
53
+
54
+
55
+ def end_sampling(server_name: str) -> None:
56
+ """End tracking a sampling operation and add to completed notifications.
57
+
58
+ Args:
59
+ server_name: Name of the server that made the sampling request
60
+ """
61
+ if 'sampling' in active_events:
62
+ del active_events['sampling']
63
+
64
+ notifications.append({
65
+ 'type': 'sampling',
66
+ 'server': server_name
67
+ })
68
+
69
+ # Force prompt_toolkit to redraw if active
70
+ try:
71
+ from prompt_toolkit.application.current import get_app
72
+ get_app().invalidate()
73
+ except Exception:
74
+ pass
75
+
76
+
77
+ def start_elicitation(server_name: str) -> None:
78
+ """Start tracking an elicitation operation.
79
+
80
+ Args:
81
+ server_name: Name of the server making the elicitation request
82
+ """
83
+ active_events['elicitation'] = {
84
+ 'server': server_name,
85
+ 'start_time': datetime.now().isoformat()
86
+ }
87
+
88
+ # Force prompt_toolkit to redraw if active
89
+ try:
90
+ from prompt_toolkit.application.current import get_app
91
+ get_app().invalidate()
92
+ except Exception:
93
+ pass
94
+
95
+
96
+ def end_elicitation(server_name: str) -> None:
97
+ """End tracking an elicitation operation and add to completed notifications.
98
+
99
+ Args:
100
+ server_name: Name of the server that made the elicitation request
101
+ """
102
+ if 'elicitation' in active_events:
103
+ del active_events['elicitation']
104
+
105
+ notifications.append({
106
+ 'type': 'elicitation',
107
+ 'server': server_name
108
+ })
109
+
110
+ # Force prompt_toolkit to redraw if active
111
+ try:
112
+ from prompt_toolkit.application.current import get_app
113
+ get_app().invalidate()
114
+ except Exception:
115
+ pass
116
+
117
+
118
+ def get_active_status() -> Optional[Dict[str, str]]:
119
+ """Get currently active operation, if any.
120
+
121
+ Returns:
122
+ Dict with 'type' and 'server' keys, or None if nothing active
123
+ """
124
+ if 'sampling' in active_events:
125
+ return {'type': 'sampling', 'server': active_events['sampling']['server']}
126
+ if 'elicitation' in active_events:
127
+ return {'type': 'elicitation', 'server': active_events['elicitation']['server']}
128
+ return None
129
+
130
+
131
+ def clear() -> None:
132
+ """Clear all notifications and active events."""
133
+ notifications.clear()
134
+ active_events.clear()
135
+
136
+
137
+ def get_count() -> int:
138
+ """Get the current completed notification count."""
139
+ return len(notifications)
140
+
141
+
142
+ def get_latest() -> Dict[str, str] | None:
143
+ """Get the most recent completed notification."""
144
+ return notifications[-1] if notifications else None
145
+
146
+
147
+ def get_counts_by_type() -> Dict[str, int]:
148
+ """Aggregate completed notifications by event type."""
149
+ counts: Dict[str, int] = {}
150
+ for notification in notifications:
151
+ event_type = notification['type']
152
+ counts[event_type] = counts.get(event_type, 0) + 1
153
+
154
+ if not counts:
155
+ return {}
156
+
157
+ ordered: Dict[str, int] = {}
158
+ for event_type in _EVENT_ORDER:
159
+ if event_type in counts:
160
+ ordered[event_type] = counts[event_type]
161
+
162
+ for event_type, count in counts.items():
163
+ if event_type not in ordered:
164
+ ordered[event_type] = count
165
+
166
+ return ordered
167
+
168
+
169
+ def format_event_label(event_type: str, count: int, *, compact: bool = False) -> str:
170
+ """Format a human-readable label for an event count."""
171
+ event_display = _EVENT_DISPLAY.get(event_type)
172
+
173
+ if event_display is None:
174
+ base = event_type.replace('_', ' ')
175
+ if compact:
176
+ return f"{base[:1]}:{count}"
177
+ label = base if count == 1 else f"{base}s"
178
+ return f"{count} {label}"
179
+
180
+ if compact:
181
+ return f"{event_display['compact']}:{count}"
182
+
183
+ label = event_display['singular'] if count == 1 else event_display['plural']
184
+ return f"{count} {label}"
185
+
186
+
187
+ def get_summary(*, compact: bool = False) -> str:
188
+ """Get a summary of completed notifications by type.
189
+
190
+ Args:
191
+ compact: When True, use short-form labels for constrained UI areas.
192
+
193
+ Returns:
194
+ String like "3 tool updates, 2 samples" or "tool:3 samp:2" when compact.
195
+ """
196
+ counts = get_counts_by_type()
197
+ if not counts:
198
+ return ""
199
+
200
+ parts = [
201
+ format_event_label(event_type, count, compact=compact)
202
+ for event_type, count in counts.items()
203
+ ]
204
+
205
+ separator = " " if compact else ", "
206
+ return separator.join(parts)
@@ -25,7 +25,7 @@ class RichProgressDisplay:
25
25
  # table_column=Column(max_width=16),
26
26
  ),
27
27
  TextColumn(text_format="{task.fields[target]:<16}", style="Bold Blue"),
28
- TextColumn(text_format="{task.fields[details]}", style="dim white"),
28
+ TextColumn(text_format="{task.fields[details]}", style="white"),
29
29
  console=self.console,
30
30
  transient=False,
31
31
  )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fast-agent-mcp
3
- Version: 0.3.10
3
+ Version: 0.3.12
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
@@ -211,7 +211,7 @@ Classifier: Programming Language :: Python :: 3
211
211
  Requires-Python: >=3.13.5
212
212
  Requires-Dist: a2a-sdk>=0.3.6
213
213
  Requires-Dist: aiohttp>=3.11.13
214
- Requires-Dist: anthropic>=0.68.0
214
+ Requires-Dist: anthropic>=0.69.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
@@ -219,8 +219,8 @@ 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
221
  Requires-Dist: keyring>=24.3.1
222
- Requires-Dist: mcp==1.15.0
223
- Requires-Dist: openai>=1.109.1
222
+ Requires-Dist: mcp==1.16.0
223
+ Requires-Dist: openai>=2.1.0
224
224
  Requires-Dist: opentelemetry-distro>=0.55b0
225
225
  Requires-Dist: opentelemetry-exporter-otlp-proto-http>=1.7.0
226
226
  Requires-Dist: opentelemetry-instrumentation-anthropic>=0.43.1; python_version >= '3.10' and python_version < '4.0'
@@ -1,18 +1,18 @@
1
1
  fast_agent/__init__.py,sha256=ns6CPmjOL5y7cyV4XgFTfMGcfLnuBJwVTbcjJ5Co3x4,4152
2
- fast_agent/config.py,sha256=5glgvbPcPZFGG6UG_P8hByryPrteqrYg4pUCep4x6s8,22509
2
+ fast_agent/config.py,sha256=tKnAhGAADpuwU7DggScG0VESs7el4R1Y1T3MUPzD5_U,22509
3
3
  fast_agent/constants.py,sha256=IoXL5m4L0iLlcRrKerMaK3ZPcS6KCJgK8b_bj1BAR60,345
4
4
  fast_agent/context.py,sha256=nBelOqehSH91z3aG2nYhwETP-biRzz-iuA2fqmKdHP8,7700
5
5
  fast_agent/context_dependent.py,sha256=KU1eydVBoIt4bYOZroqxDgE1AUexDaZi7hurE26QsF4,1584
6
6
  fast_agent/event_progress.py,sha256=OETeh-4jJGyxvvPAlVTzW4JsCbFUmOTo-ti0ROgtG5M,1999
7
- fast_agent/interfaces.py,sha256=0WCi97-gZT1WU4B4OfP8wduAVImA_s4ji8Z3pACS6J0,6241
7
+ fast_agent/interfaces.py,sha256=XktRxJjLfCMPbC5ReV23dP-dRy0gDNtYfMCvSp0QD0I,6373
8
8
  fast_agent/mcp_server_registry.py,sha256=TDCNpQIehsh1PK4y7AWp_rkQMcwYx7FaouUbK3kWNZo,2635
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=xAFEFWIvOtSnTNDcqqfaAnBx_lFLhnS2_b4hm9xKMo8,1719
12
12
  fast_agent/agents/llm_agent.py,sha256=k2owG-tADgRsH6cFjvgCWM8krbaMoj12GBykmqxindk,10715
13
- fast_agent/agents/llm_decorator.py,sha256=08emhIHxNi7YX9DlF3tOY_H4AzUHhhxF1WpWqmlPtrY,29449
13
+ fast_agent/agents/llm_decorator.py,sha256=OezFrnjLwcl3W-1K1sGPtTqD_zVp67wlBUb4SxTesKw,29702
14
14
  fast_agent/agents/mcp_agent.py,sha256=O9CrjjUrkmbNYsXQevZy2b8EG4B0KdNSH3wtnbe2HI4,39279
15
- fast_agent/agents/tool_agent.py,sha256=UMgNi56XTecP-qnpcIJLzfJ4SFTCTIjz9K49azz8M94,8869
15
+ fast_agent/agents/tool_agent.py,sha256=bR0V06zCjuPVtOpOQQzym2Mmyt6EsDzAodJmQOEMoFI,8883
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
@@ -28,18 +28,18 @@ fast_agent/cli/terminal.py,sha256=tDN1fJ91Nc_wZJTNafkQuD7Z7gFscvo1PHh-t7Wl-5s,10
28
28
  fast_agent/cli/commands/auth.py,sha256=nJEC7zrz5UXYUz5O6AgGZnfJPHIrgHk68CUwGo-7Nyg,15063
29
29
  fast_agent/cli/commands/check_config.py,sha256=D0emHGl6yc9XRq-HjAwS4KfS7a9r5gkA55MyiIRptGQ,26638
30
30
  fast_agent/cli/commands/go.py,sha256=mZJv1jXO9xqVUzuDCO5iWKI8ubBUACHO6i3lZwu5NFU,15148
31
- fast_agent/cli/commands/quickstart.py,sha256=CiSen7VxmKDy7apJZ8rAyC33-BIo0zsUt8cBnEtxg0Y,21241
31
+ fast_agent/cli/commands/quickstart.py,sha256=UOTqAbaVGLECHkTvpUNQ41PWXssqCijVvrqh30YUqnM,20624
32
32
  fast_agent/cli/commands/server_helpers.py,sha256=Nuded8sZb4Rybwoq5LbXXUgwtJZg-OO04xhmPUp6e98,4073
33
33
  fast_agent/cli/commands/setup.py,sha256=n5hVjXkKTmuiW8-0ezItVcMHJ92W6NlE2JOGCYiKw0A,6388
34
34
  fast_agent/cli/commands/url_parser.py,sha256=v9KoprPBEEST5Fo7qXgbW50GC5vMpxFteKqAT6mFkdI,5991
35
35
  fast_agent/core/__init__.py,sha256=n2ly7SBtFko9H2DPVh8cSqfw9chtiUaokxLmiDpaMyU,2233
36
36
  fast_agent/core/agent_app.py,sha256=sUGrG7djpVfZXHrzZKulmY6zodiN8JXtZoew_syThuI,16917
37
37
  fast_agent/core/core_app.py,sha256=_8Di00HD2BzWhCAaopAUS0Hzc7pg0249QUUfPuLZ36A,4266
38
- fast_agent/core/direct_decorators.py,sha256=0U4_qJl7pdom9mjQ5qwCeb0zBwc5hj-lKFF6zXs62sI,22621
38
+ fast_agent/core/direct_decorators.py,sha256=-oGOqgLKJhJJJyn0KBN7iAOjtdg4XrX3JCxjoL0uzYI,22641
39
39
  fast_agent/core/direct_factory.py,sha256=SYYVtEqPQh7ElvAVC_445a5pZkKstM0RhKNGZ2CJQT8,18338
40
40
  fast_agent/core/error_handling.py,sha256=tZkO8LnXO-qf6jD8a12Pv5fD4NhnN1Ag5_tJ6DwbXjg,631
41
41
  fast_agent/core/exceptions.py,sha256=ENAD_qGG67foxy6vDkIvc-lgopIUQy6O7zvNPpPXaQg,2289
42
- fast_agent/core/fastagent.py,sha256=0Kvd5rHqVRdkBPdDZQWnV3KzrqGDzDz0_BBRTddCWzE,30828
42
+ fast_agent/core/fastagent.py,sha256=ZJYJAgJc-wNmgy2IR3TBc2Gr_Q2dxEoOccbA8kQkPEI,30894
43
43
  fast_agent/core/prompt.py,sha256=qNUFlK3KtU7leYysYUglzBYQnEYiXu__iR_T8189zc0,203
44
44
  fast_agent/core/validation.py,sha256=GZ0hUTxkr5KMY1wr6_ifDy91Ycvcx384gZEMOwdie9w,12681
45
45
  fast_agent/core/executor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -54,16 +54,16 @@ fast_agent/core/logging/logger.py,sha256=L-hLfUGFCIABoNYDiUkNHWvFxL6j-6zn5Pc5E7a
54
54
  fast_agent/core/logging/transport.py,sha256=i_WYXk5mqyfetT72bCYrbdrMWcuL1HJCyeQKfQg7U2w,16994
55
55
  fast_agent/history/history_exporter.py,sha256=oqkw7qC5rrW73u20tkIqt8yBWPoVzCTC61x2Q2rOKGs,1404
56
56
  fast_agent/human_input/__init__.py,sha256=4Jr_0JLJwdQ3iEUNd6Api9InldtnRMDv_WeZq_WEHpA,935
57
- fast_agent/human_input/elicitation_handler.py,sha256=U6278SJLIu1tosyL6qvo5OVwMSVE03gpGlWoF8YDlvQ,3985
57
+ fast_agent/human_input/elicitation_handler.py,sha256=diR8jWRCAuoqTDQHJ3C097EORcLFxpLjdz6EubVOnI8,4776
58
58
  fast_agent/human_input/elicitation_state.py,sha256=L_vSTpw1-TSDumRYa89Me-twWRbUL2w7GNVhVJmn3KE,1152
59
59
  fast_agent/human_input/form_fields.py,sha256=aE7HdR-wOPO_6HllNaJXtn3BzpPsC4TctUApbveRk8g,7644
60
60
  fast_agent/human_input/simple_form.py,sha256=_flUll9z93VPjKqLS7gvz4L1_YJ3-KNx8_ZpUaaxhoQ,3508
61
61
  fast_agent/human_input/types.py,sha256=3Zz89yIt8SuDAVAaRy-r4Vw0-M6AWahwbqQ0yOcoe20,954
62
62
  fast_agent/llm/__init__.py,sha256=MCsrkfnTQXYvn0SofJ-JFmp1l1jX_eidgvegbWbgpsw,184
63
- fast_agent/llm/fastagent_llm.py,sha256=LvaGB3cwdnYBxNfPgC6hq-QcLV7dY2yEU97DpifYmik,24177
63
+ fast_agent/llm/fastagent_llm.py,sha256=GyvBGAgwd1frWUzSiBANNQdFX-a50ps97WPEX7q2uw8,25119
64
64
  fast_agent/llm/memory.py,sha256=POFoBVMHK0wX4oLd3Gz-6Ru3uC4kTCvAqsVQ77e7KJA,8551
65
- fast_agent/llm/model_database.py,sha256=1sk-0A7303-TOzNQW_IyqVjdyTCUS8a2i2KtwDZigUM,12821
66
- fast_agent/llm/model_factory.py,sha256=FfrmLM9TnBA7-8bjj_gWLQZbEXvaVqDqKp0C6NkvCSU,12895
65
+ fast_agent/llm/model_database.py,sha256=qhC4CX_dKNDTQ3bJA_YCq2wIJK5YP_xlbqNuI1K-a6g,12948
66
+ fast_agent/llm/model_factory.py,sha256=y0gmgFzk15UJHZuTbnp5ExYG4DhlX0X1YzzUc1leNVo,13043
67
67
  fast_agent/llm/model_info.py,sha256=DAIMW70W-EFqNLIudhjHJE2gobHUAKg90gkwOPuaFUc,4125
68
68
  fast_agent/llm/prompt_utils.py,sha256=1WU67G-BFqftja5I8FKPMMzsvDk1K_1jDi9A9kkFdOg,4899
69
69
  fast_agent/llm/provider_key_manager.py,sha256=igzs1ghXsUp0wA4nJVVfWCWiYOib8Ux4jMGlhWbgXu8,3396
@@ -97,14 +97,14 @@ fast_agent/llm/provider/openai/openai_multipart.py,sha256=uuoRMYWiznYksBODbknBuq
97
97
  fast_agent/llm/provider/openai/openai_utils.py,sha256=RI9UgF7SGkZ02bAep7glvLy3erbismmZp7wXDsRoJPQ,2034
98
98
  fast_agent/mcp/__init__.py,sha256=Q-86MBawKmB602VMut8U3uqUQDOrTAMx2HmHKnWT32Q,1371
99
99
  fast_agent/mcp/common.py,sha256=MpSC0fLO21RcDz4VApah4C8_LisVGz7OXkR17Xw-9mY,431
100
- fast_agent/mcp/elicitation_factory.py,sha256=p9tSTcs1KSCXkFcFv1cG7vJBpS1PedOJ5bcBJp0qKw4,3172
100
+ fast_agent/mcp/elicitation_factory.py,sha256=d4unxJyR0S-qH05yBZ_oQ08XLBToFtUzzFFYvv0wLrY,3172
101
101
  fast_agent/mcp/elicitation_handlers.py,sha256=LWNKn850Ht9V1SGTfAZDptlsgzrycNhOPNsCcqzsuUY,6884
102
102
  fast_agent/mcp/gen_client.py,sha256=Q0hhCVzC659GsvTLJIbhUBgGwsAJRL8b3ejTFokyjn4,3038
103
103
  fast_agent/mcp/hf_auth.py,sha256=ndDvR7E9LCc5dBiMsStFXtvvX9lYrL-edCq_qJw4lDw,4476
104
104
  fast_agent/mcp/interfaces.py,sha256=xCWONGXe4uQSmmBlMZRD3mflPegTJnz2caVNihEl3ok,2411
105
105
  fast_agent/mcp/logger_textio.py,sha256=4YLVXlXghdGm1s_qp1VoAWEX_eWufBfD2iD7l08yoak,3170
106
106
  fast_agent/mcp/mcp_agent_client_session.py,sha256=5_9cW3CSzYspRzb8lOJTFx9E8Qk7ieCBASBbUtNrmiY,15578
107
- fast_agent/mcp/mcp_aggregator.py,sha256=hKpxLFMiNUjvGLep0TGkZ1w7ZOZVGypVoqqTsn4fUa0,67649
107
+ fast_agent/mcp/mcp_aggregator.py,sha256=HzNyKuUelAlp5JBkjMAaOB2JvdMgpm0ItEPGjidI9l0,67198
108
108
  fast_agent/mcp/mcp_connection_manager.py,sha256=nbjcyWGK3LQhuFUABV1Mxf_v3rWFSMXNsDHV1h3qDUI,23803
109
109
  fast_agent/mcp/mcp_content.py,sha256=F9bgJ57EO9sgWg1m-eTNM6xd9js79mHKf4e9O8K8jrI,8829
110
110
  fast_agent/mcp/mime_utils.py,sha256=D6YXNdZJ351BjacSW5o0sVF_hrWuRHD6UyWS4TDlLZI,2915
@@ -114,7 +114,7 @@ fast_agent/mcp/prompt_message_extended.py,sha256=BsiV2SsiZkDlvqzvjeSowq8Ojvowr9X
114
114
  fast_agent/mcp/prompt_render.py,sha256=AqDaQqM6kqciV9X79S5rsRr3VjcQ_2JOiLaHqpRzsS4,2888
115
115
  fast_agent/mcp/prompt_serialization.py,sha256=QMbY0aa_UlJ7bbxl_muOm2TYeYbBVTEeEMHFmEy99ss,20182
116
116
  fast_agent/mcp/resource_utils.py,sha256=cu-l9aOy-NFs8tPihYRNjsB2QSuime8KGOGpUvihp84,6589
117
- fast_agent/mcp/sampling.py,sha256=3EhEguls5GpVMr_SYrVQcYSRXlryGmqidn-zbFaeDMk,6711
117
+ fast_agent/mcp/sampling.py,sha256=6S9bpGCFGC5azIGE-zxODvKgBbBn1x6amL5mc4sMg_4,7491
118
118
  fast_agent/mcp/stdio_tracking_simple.py,sha256=T6kCIb6YjwqKtXHz_6HvlLLYiSCbuggt2xCXSihVnIg,1918
119
119
  fast_agent/mcp/streamable_http_tracking.py,sha256=bcNNReokho6WMjWEH13F33bUSkjJ2F5l3qnegkDqdMA,11465
120
120
  fast_agent/mcp/transport_tracking.py,sha256=tsc2Ntf47KbKXs8DzRkqvG0U-FbpwU2VxemNfRbJBpo,24088
@@ -127,7 +127,7 @@ fast_agent/mcp/prompts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3
127
127
  fast_agent/mcp/prompts/__main__.py,sha256=Jsx30MceW6_f0rU_RJw2qQVB7zj2yRPP8mXXjBuJiNw,145
128
128
  fast_agent/mcp/prompts/prompt_constants.py,sha256=Q9W0t3rOXl2LHIG9wcghApUV2QZ1iICuo7SwVwHUf3c,566
129
129
  fast_agent/mcp/prompts/prompt_helpers.py,sha256=lvcgG1D61FimGUS5rYifMmmidWwFpIs3Egvjf1sfnkE,7486
130
- fast_agent/mcp/prompts/prompt_load.py,sha256=muv-3u0fJODYFTRWnrPWGJIFHuyDXZd5DudiZEkuVPc,5495
130
+ fast_agent/mcp/prompts/prompt_load.py,sha256=1KixVXpkML3_kY3vC59AlMfcBXQVESrII24yx_CyE6s,5495
131
131
  fast_agent/mcp/prompts/prompt_server.py,sha256=ZuUFqYfiYYE8yTXw0qagGWkZkelQgETGBpzUIdIhLXc,20174
132
132
  fast_agent/mcp/prompts/prompt_template.py,sha256=SAklXs9wujYqqEWv5vzRI_cdjSmGnWlDmPLZ5qkXZO4,15695
133
133
  fast_agent/mcp/server/__init__.py,sha256=AJFNzdmuHPRL3jqFhDVDJste_zYE_KJ3gGYDsbghvl0,156
@@ -191,19 +191,21 @@ fast_agent/types/__init__.py,sha256=y-53m-C4drf4Rx8Bbnk_GAhko9LdNYCyRUWya8e0mos,
191
191
  fast_agent/types/llm_stop_reason.py,sha256=bWe97OfhALUe8uQeAQOnTdPlYzJiabIfo8u38kPgj3Q,2293
192
192
  fast_agent/ui/__init__.py,sha256=MXxTQjFdF7mI_3JHxBPd-aoZYLlxV_-51-Trqgv5-3w,1104
193
193
  fast_agent/ui/console.py,sha256=Gjf2QLFumwG1Lav__c07X_kZxxEUSkzV-1_-YbAwcwo,813
194
- fast_agent/ui/console_display.py,sha256=8KBhiv1RRvi-WcvddaFgxkgoCDRdq81uJR_QFnLM-M0,41744
194
+ fast_agent/ui/console_display.py,sha256=oZg-SMd_F0_1azsxWF5ug7cee_-ou2xOgGeW_y_6xrI,42034
195
195
  fast_agent/ui/elicitation_form.py,sha256=t3UhBG44YmxTLu1RjCnHwW36eQQaroE45CiBGJB2czg,29410
196
196
  fast_agent/ui/elicitation_style.py,sha256=-WqXgVjVs65oNwhCDw3E0A9cCyw95IOe6LYCJgjT6ok,3939
197
- fast_agent/ui/enhanced_prompt.py,sha256=aFQfKijKzE1y_erDaufdYl74u3wXOXWJLc0LwxfRlyI,42647
198
- fast_agent/ui/interactive_prompt.py,sha256=Y-tYaU_5jqjDLRRgP3rzoMAXmJxYHVIVPsd8gWkcQso,44823
199
- fast_agent/ui/mcp_display.py,sha256=afBNB2jg5BFpLMxB3m0klQXwScpJxDXGafSC_RTPwA0,26418
197
+ fast_agent/ui/enhanced_prompt.py,sha256=TPJmC1zKQaiqDbtlI0WcxUoH5uw1sY23uJ8uEeYiMCY,45018
198
+ fast_agent/ui/history_display.py,sha256=b7l-pXohSnn1YK1g-8BUmY479x-d-wf5sG2pItG2_ps,19024
199
+ fast_agent/ui/interactive_prompt.py,sha256=KI2jSO4roWNivfOeyibiu44J9pu5RU6PiB7Fd59iCYw,46699
200
+ fast_agent/ui/mcp_display.py,sha256=vokUfri1DSMpMLyvzJqFrrqKED_dU2-xafWY8vEUjGo,27333
200
201
  fast_agent/ui/mcp_ui_utils.py,sha256=hV7z-yHX86BgdH6CMmN5qyOUjyiegQXLJOa5n5A1vQs,8476
201
202
  fast_agent/ui/mermaid_utils.py,sha256=MpcRyVCPMTwU1XeIxnyFg0fQLjcyXZduWRF8NhEqvXE,5332
203
+ fast_agent/ui/notification_tracker.py,sha256=-hiBwR47SdnwhvrGIXcgsVaqMlMudmrKAf9Xi_E5Eok,5850
202
204
  fast_agent/ui/progress_display.py,sha256=hajDob65PttiJ2mPS6FsCtnmTcnyvDWGn-UqQboXqkQ,361
203
- fast_agent/ui/rich_progress.py,sha256=fMiTigtkll4gL4Ik5WYHx-t0a92jfUovj0b580rT6J0,7735
205
+ fast_agent/ui/rich_progress.py,sha256=4n5NmsRQTT1GX18faP43yLPhB_gZJqJeWX6-j7g1_zI,7731
204
206
  fast_agent/ui/usage_display.py,sha256=ltJpn_sDzo8PDNSXWx-QdEUbQWUnhmajCItNt5mA5rM,7285
205
- fast_agent_mcp-0.3.10.dist-info/METADATA,sha256=t08x_3p6tpwIIEwfN_NKkUAP3AwrIF4s169OlSuDp38,31697
206
- fast_agent_mcp-0.3.10.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
207
- fast_agent_mcp-0.3.10.dist-info/entry_points.txt,sha256=i6Ujja9J-hRxttOKqTYdbYP_tyaS4gLHg53vupoCSsg,199
208
- fast_agent_mcp-0.3.10.dist-info/licenses/LICENSE,sha256=Gx1L3axA4PnuK4FxsbX87jQ1opoOkSFfHHSytW6wLUU,10935
209
- fast_agent_mcp-0.3.10.dist-info/RECORD,,
207
+ fast_agent_mcp-0.3.12.dist-info/METADATA,sha256=04VuIDYIhpA_OQHA6Ejz-O7wXpwu6uXwethvvhSuwa8,31695
208
+ fast_agent_mcp-0.3.12.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
209
+ fast_agent_mcp-0.3.12.dist-info/entry_points.txt,sha256=i6Ujja9J-hRxttOKqTYdbYP_tyaS4gLHg53vupoCSsg,199
210
+ fast_agent_mcp-0.3.12.dist-info/licenses/LICENSE,sha256=Gx1L3axA4PnuK4FxsbX87jQ1opoOkSFfHHSytW6wLUU,10935
211
+ fast_agent_mcp-0.3.12.dist-info/RECORD,,