fast-agent-mcp 0.3.11__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.

@@ -6,6 +6,14 @@ Tracks both active events (sampling/elicitation) and completed notifications.
6
6
  from datetime import datetime
7
7
  from typing import Dict, List, Optional
8
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
+
9
17
  # Active events currently in progress
10
18
  active_events: Dict[str, Dict[str, str]] = {}
11
19
 
@@ -136,32 +144,63 @@ def get_latest() -> Dict[str, str] | None:
136
144
  return notifications[-1] if notifications else None
137
145
 
138
146
 
139
- def get_summary() -> str:
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:
140
188
  """Get a summary of completed notifications by type.
141
189
 
190
+ Args:
191
+ compact: When True, use short-form labels for constrained UI areas.
192
+
142
193
  Returns:
143
- String like "3 tools, 1 sampling, 2 elicitations" or "1 tool update"
194
+ String like "3 tool updates, 2 samples" or "tool:3 samp:2" when compact.
144
195
  """
145
- if not notifications:
196
+ counts = get_counts_by_type()
197
+ if not counts:
146
198
  return ""
147
199
 
148
- counts = {}
149
- for notification in notifications:
150
- event_type = notification['type']
151
- if event_type == 'tool_update':
152
- counts['tools'] = counts.get('tools', 0) + 1
153
- else:
154
- # For sampling/elicitation, use the type directly
155
- counts[event_type] = counts.get(event_type, 0) + 1
156
-
157
- # Build summary string
158
- parts = []
159
- for event_type, count in sorted(counts.items()):
160
- if event_type == 'tools':
161
- parts.append(f"{count} tool{'s' if count != 1 else ''}")
162
- elif event_type == 'sampling':
163
- parts.append(f"{count} sample{'s' if count != 1 else ''}")
164
- else:
165
- parts.append(f"{count} {event_type}{'s' if count != 1 else ''}")
166
-
167
- return ", ".join(parts)
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.11
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'
@@ -4,15 +4,15 @@ 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
@@ -60,10 +60,10 @@ fast_agent/human_input/form_fields.py,sha256=aE7HdR-wOPO_6HllNaJXtn3BzpPsC4TctUA
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
@@ -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
@@ -194,17 +194,18 @@ fast_agent/ui/console.py,sha256=Gjf2QLFumwG1Lav__c07X_kZxxEUSkzV-1_-YbAwcwo,813
194
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=nGtYqvabfwYqCNczqWEf36AjY4laetG8CI__ePKtwKs,43496
198
- fast_agent/ui/interactive_prompt.py,sha256=Y-tYaU_5jqjDLRRgP3rzoMAXmJxYHVIVPsd8gWkcQso,44823
199
- fast_agent/ui/mcp_display.py,sha256=54NVlWL6KsvhLP2tZm3edC3RH7fiLOJeKOYQCJ55uks,27142
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
202
- fast_agent/ui/notification_tracker.py,sha256=XU2_C_1PwKEReyL2L6sFfFOq-3CczMlBiIIspxUjx0E,4625
203
+ fast_agent/ui/notification_tracker.py,sha256=-hiBwR47SdnwhvrGIXcgsVaqMlMudmrKAf9Xi_E5Eok,5850
203
204
  fast_agent/ui/progress_display.py,sha256=hajDob65PttiJ2mPS6FsCtnmTcnyvDWGn-UqQboXqkQ,361
204
- fast_agent/ui/rich_progress.py,sha256=fMiTigtkll4gL4Ik5WYHx-t0a92jfUovj0b580rT6J0,7735
205
+ fast_agent/ui/rich_progress.py,sha256=4n5NmsRQTT1GX18faP43yLPhB_gZJqJeWX6-j7g1_zI,7731
205
206
  fast_agent/ui/usage_display.py,sha256=ltJpn_sDzo8PDNSXWx-QdEUbQWUnhmajCItNt5mA5rM,7285
206
- fast_agent_mcp-0.3.11.dist-info/METADATA,sha256=hXINwYTIB7UUzPSbYOlPN0Mcq-YUKy1nWlfs0Gx5hcQ,31697
207
- fast_agent_mcp-0.3.11.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
208
- fast_agent_mcp-0.3.11.dist-info/entry_points.txt,sha256=i6Ujja9J-hRxttOKqTYdbYP_tyaS4gLHg53vupoCSsg,199
209
- fast_agent_mcp-0.3.11.dist-info/licenses/LICENSE,sha256=Gx1L3axA4PnuK4FxsbX87jQ1opoOkSFfHHSytW6wLUU,10935
210
- fast_agent_mcp-0.3.11.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,,