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.
- fast_agent/agents/llm_decorator.py +7 -0
- fast_agent/agents/tool_agent.py +2 -2
- fast_agent/cli/commands/quickstart.py +142 -129
- fast_agent/core/direct_decorators.py +18 -26
- fast_agent/core/fastagent.py +2 -1
- fast_agent/interfaces.py +4 -0
- fast_agent/llm/fastagent_llm.py +17 -0
- fast_agent/llm/model_database.py +2 -0
- fast_agent/llm/model_factory.py +4 -1
- fast_agent/mcp/prompts/prompt_load.py +2 -3
- fast_agent/ui/enhanced_prompt.py +47 -16
- fast_agent/ui/history_display.py +555 -0
- fast_agent/ui/interactive_prompt.py +44 -12
- fast_agent/ui/mcp_display.py +3 -0
- fast_agent/ui/notification_tracker.py +62 -23
- fast_agent/ui/rich_progress.py +1 -1
- {fast_agent_mcp-0.3.11.dist-info → fast_agent_mcp-0.3.12.dist-info}/METADATA +4 -4
- {fast_agent_mcp-0.3.11.dist-info → fast_agent_mcp-0.3.12.dist-info}/RECORD +21 -20
- {fast_agent_mcp-0.3.11.dist-info → fast_agent_mcp-0.3.12.dist-info}/WHEEL +0 -0
- {fast_agent_mcp-0.3.11.dist-info → fast_agent_mcp-0.3.12.dist-info}/entry_points.txt +0 -0
- {fast_agent_mcp-0.3.11.dist-info → fast_agent_mcp-0.3.12.dist-info}/licenses/LICENSE +0 -0
|
@@ -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
|
|
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
|
|
194
|
+
String like "3 tool updates, 2 samples" or "tool:3 samp:2" when compact.
|
|
144
195
|
"""
|
|
145
|
-
|
|
196
|
+
counts = get_counts_by_type()
|
|
197
|
+
if not counts:
|
|
146
198
|
return ""
|
|
147
199
|
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
event_type
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
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)
|
fast_agent/ui/rich_progress.py
CHANGED
|
@@ -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="
|
|
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.
|
|
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.
|
|
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.
|
|
223
|
-
Requires-Dist: openai>=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=
|
|
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=
|
|
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=
|
|
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=
|
|
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
|
|
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=
|
|
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=
|
|
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=
|
|
66
|
-
fast_agent/llm/model_factory.py,sha256=
|
|
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=
|
|
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=
|
|
198
|
-
fast_agent/ui/
|
|
199
|
-
fast_agent/ui/
|
|
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
|
|
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=
|
|
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.
|
|
207
|
-
fast_agent_mcp-0.3.
|
|
208
|
-
fast_agent_mcp-0.3.
|
|
209
|
-
fast_agent_mcp-0.3.
|
|
210
|
-
fast_agent_mcp-0.3.
|
|
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,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|