fast-agent-mcp 0.3.15__py3-none-any.whl → 0.3.17__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/__init__.py +2 -0
- fast_agent/agents/agent_types.py +5 -0
- fast_agent/agents/llm_agent.py +7 -0
- fast_agent/agents/llm_decorator.py +6 -0
- fast_agent/agents/mcp_agent.py +134 -10
- fast_agent/cli/__main__.py +35 -0
- fast_agent/cli/commands/check_config.py +85 -0
- fast_agent/cli/commands/go.py +100 -36
- fast_agent/cli/constants.py +15 -1
- fast_agent/cli/main.py +2 -1
- fast_agent/config.py +39 -10
- fast_agent/constants.py +8 -0
- fast_agent/context.py +24 -15
- fast_agent/core/direct_decorators.py +9 -0
- fast_agent/core/fastagent.py +101 -1
- fast_agent/core/logging/listeners.py +8 -0
- fast_agent/interfaces.py +12 -0
- fast_agent/llm/fastagent_llm.py +45 -0
- fast_agent/llm/memory.py +26 -1
- fast_agent/llm/model_database.py +4 -1
- fast_agent/llm/model_factory.py +4 -2
- fast_agent/llm/model_info.py +19 -43
- fast_agent/llm/provider/anthropic/llm_anthropic.py +112 -0
- fast_agent/llm/provider/google/llm_google_native.py +238 -7
- fast_agent/llm/provider/openai/llm_openai.py +382 -19
- fast_agent/llm/provider/openai/responses.py +133 -0
- fast_agent/resources/setup/agent.py +2 -0
- fast_agent/resources/setup/fastagent.config.yaml +6 -0
- fast_agent/skills/__init__.py +9 -0
- fast_agent/skills/registry.py +208 -0
- fast_agent/tools/shell_runtime.py +404 -0
- fast_agent/ui/console_display.py +47 -996
- fast_agent/ui/elicitation_form.py +76 -24
- fast_agent/ui/elicitation_style.py +2 -2
- fast_agent/ui/enhanced_prompt.py +107 -37
- fast_agent/ui/history_display.py +20 -5
- fast_agent/ui/interactive_prompt.py +108 -3
- fast_agent/ui/markdown_helpers.py +104 -0
- fast_agent/ui/markdown_truncator.py +103 -45
- fast_agent/ui/message_primitives.py +50 -0
- fast_agent/ui/streaming.py +638 -0
- fast_agent/ui/tool_display.py +417 -0
- {fast_agent_mcp-0.3.15.dist-info → fast_agent_mcp-0.3.17.dist-info}/METADATA +8 -7
- {fast_agent_mcp-0.3.15.dist-info → fast_agent_mcp-0.3.17.dist-info}/RECORD +47 -39
- {fast_agent_mcp-0.3.15.dist-info → fast_agent_mcp-0.3.17.dist-info}/WHEEL +0 -0
- {fast_agent_mcp-0.3.15.dist-info → fast_agent_mcp-0.3.17.dist-info}/entry_points.txt +0 -0
- {fast_agent_mcp-0.3.15.dist-info → fast_agent_mcp-0.3.17.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1,417 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import json
|
|
4
|
+
from typing import TYPE_CHECKING, Any, Mapping
|
|
5
|
+
|
|
6
|
+
from rich.syntax import Syntax
|
|
7
|
+
from rich.text import Text
|
|
8
|
+
|
|
9
|
+
from fast_agent.ui import console
|
|
10
|
+
from fast_agent.ui.message_primitives import MESSAGE_CONFIGS, MessageType
|
|
11
|
+
|
|
12
|
+
if TYPE_CHECKING:
|
|
13
|
+
from mcp.types import CallToolResult
|
|
14
|
+
|
|
15
|
+
from fast_agent.mcp.skybridge import SkybridgeServerConfig
|
|
16
|
+
from fast_agent.ui.console_display import ConsoleDisplay
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class ToolDisplay:
|
|
20
|
+
"""Encapsulates rendering logic for tool calls and results."""
|
|
21
|
+
|
|
22
|
+
def __init__(self, display: "ConsoleDisplay") -> None:
|
|
23
|
+
self._display = display
|
|
24
|
+
|
|
25
|
+
@property
|
|
26
|
+
def _markup(self) -> bool:
|
|
27
|
+
return self._display._markup
|
|
28
|
+
|
|
29
|
+
def show_tool_result(
|
|
30
|
+
self,
|
|
31
|
+
result: CallToolResult,
|
|
32
|
+
*,
|
|
33
|
+
name: str | None = None,
|
|
34
|
+
tool_name: str | None = None,
|
|
35
|
+
skybridge_config: "SkybridgeServerConfig | None" = None,
|
|
36
|
+
) -> None:
|
|
37
|
+
"""Display a tool result in the console."""
|
|
38
|
+
config = self._display.config
|
|
39
|
+
if not config or not config.logger.show_tools:
|
|
40
|
+
return
|
|
41
|
+
|
|
42
|
+
from fast_agent.mcp.helpers.content_helpers import get_text, is_text_content
|
|
43
|
+
|
|
44
|
+
content = result.content
|
|
45
|
+
structured_content = getattr(result, "structuredContent", None)
|
|
46
|
+
has_structured = structured_content is not None
|
|
47
|
+
|
|
48
|
+
is_skybridge_tool = False
|
|
49
|
+
skybridge_resource_uri: str | None = None
|
|
50
|
+
if has_structured and tool_name and skybridge_config:
|
|
51
|
+
for tool_cfg in skybridge_config.tools:
|
|
52
|
+
if tool_cfg.tool_name == tool_name and tool_cfg.is_valid:
|
|
53
|
+
is_skybridge_tool = True
|
|
54
|
+
skybridge_resource_uri = tool_cfg.resource_uri
|
|
55
|
+
break
|
|
56
|
+
|
|
57
|
+
if result.isError:
|
|
58
|
+
status = "ERROR"
|
|
59
|
+
else:
|
|
60
|
+
if len(content) == 0:
|
|
61
|
+
status = "No Content"
|
|
62
|
+
elif len(content) == 1 and is_text_content(content[0]):
|
|
63
|
+
text_content = get_text(content[0])
|
|
64
|
+
char_count = len(text_content) if text_content else 0
|
|
65
|
+
status = f"Text Only {char_count} chars"
|
|
66
|
+
else:
|
|
67
|
+
text_count = sum(1 for item in content if is_text_content(item))
|
|
68
|
+
if text_count == len(content):
|
|
69
|
+
status = f"{len(content)} Text Blocks" if len(content) > 1 else "1 Text Block"
|
|
70
|
+
else:
|
|
71
|
+
status = (
|
|
72
|
+
f"{len(content)} Content Blocks" if len(content) > 1 else "1 Content Block"
|
|
73
|
+
)
|
|
74
|
+
|
|
75
|
+
channel = getattr(result, "transport_channel", None)
|
|
76
|
+
bottom_metadata_items: list[str] = []
|
|
77
|
+
if channel:
|
|
78
|
+
if channel == "post-json":
|
|
79
|
+
transport_info = "HTTP (JSON-RPC)"
|
|
80
|
+
elif channel == "post-sse":
|
|
81
|
+
transport_info = "HTTP (SSE)"
|
|
82
|
+
elif channel == "get":
|
|
83
|
+
transport_info = "Legacy SSE"
|
|
84
|
+
elif channel == "resumption":
|
|
85
|
+
transport_info = "Resumption"
|
|
86
|
+
elif channel == "stdio":
|
|
87
|
+
transport_info = "STDIO"
|
|
88
|
+
else:
|
|
89
|
+
transport_info = channel.upper()
|
|
90
|
+
|
|
91
|
+
bottom_metadata_items.append(transport_info)
|
|
92
|
+
|
|
93
|
+
elapsed = getattr(result, "transport_elapsed", None)
|
|
94
|
+
if isinstance(elapsed, (int, float)):
|
|
95
|
+
bottom_metadata_items.append(self._display._format_elapsed(float(elapsed)))
|
|
96
|
+
|
|
97
|
+
if has_structured:
|
|
98
|
+
bottom_metadata_items.append("Structured ■")
|
|
99
|
+
|
|
100
|
+
bottom_metadata = bottom_metadata_items or None
|
|
101
|
+
right_info = f"[dim]tool result - {status}[/dim]"
|
|
102
|
+
|
|
103
|
+
if has_structured:
|
|
104
|
+
config_map = MESSAGE_CONFIGS[MessageType.TOOL_RESULT]
|
|
105
|
+
block_color = "red" if result.isError else config_map["block_color"]
|
|
106
|
+
arrow = config_map["arrow"]
|
|
107
|
+
arrow_style = config_map["arrow_style"]
|
|
108
|
+
left = f"[{block_color}]▎[/{block_color}][{arrow_style}]{arrow}[/{arrow_style}]"
|
|
109
|
+
if name:
|
|
110
|
+
name_color = block_color if not result.isError else "red"
|
|
111
|
+
left += f" [{name_color}]{name}[/{name_color}]"
|
|
112
|
+
|
|
113
|
+
self._display._create_combined_separator_status(left, right_info)
|
|
114
|
+
|
|
115
|
+
self._display._display_content(
|
|
116
|
+
content,
|
|
117
|
+
True,
|
|
118
|
+
result.isError,
|
|
119
|
+
MessageType.TOOL_RESULT,
|
|
120
|
+
check_markdown_markers=False,
|
|
121
|
+
)
|
|
122
|
+
|
|
123
|
+
console.console.print()
|
|
124
|
+
total_width = console.console.size.width
|
|
125
|
+
|
|
126
|
+
if is_skybridge_tool:
|
|
127
|
+
resource_label = (
|
|
128
|
+
f"skybridge resource: {skybridge_resource_uri}"
|
|
129
|
+
if skybridge_resource_uri
|
|
130
|
+
else "skybridge resource"
|
|
131
|
+
)
|
|
132
|
+
prefix = Text("─| ")
|
|
133
|
+
prefix.stylize("dim")
|
|
134
|
+
resource_text = Text(resource_label, style="magenta")
|
|
135
|
+
suffix = Text(" |")
|
|
136
|
+
suffix.stylize("dim")
|
|
137
|
+
|
|
138
|
+
separator_line = Text()
|
|
139
|
+
separator_line.append_text(prefix)
|
|
140
|
+
separator_line.append_text(resource_text)
|
|
141
|
+
separator_line.append_text(suffix)
|
|
142
|
+
remaining = total_width - separator_line.cell_len
|
|
143
|
+
if remaining > 0:
|
|
144
|
+
separator_line.append("─" * remaining, style="dim")
|
|
145
|
+
console.console.print(separator_line, markup=self._markup)
|
|
146
|
+
console.console.print()
|
|
147
|
+
|
|
148
|
+
json_str = json.dumps(structured_content, indent=2)
|
|
149
|
+
syntax_obj = Syntax(
|
|
150
|
+
json_str,
|
|
151
|
+
"json",
|
|
152
|
+
theme=self._display.code_style,
|
|
153
|
+
background_color="default",
|
|
154
|
+
)
|
|
155
|
+
console.console.print(syntax_obj, markup=self._markup)
|
|
156
|
+
else:
|
|
157
|
+
prefix = Text("─| ")
|
|
158
|
+
prefix.stylize("dim")
|
|
159
|
+
suffix = Text(" |")
|
|
160
|
+
suffix.stylize("dim")
|
|
161
|
+
available = max(0, total_width - prefix.cell_len - suffix.cell_len)
|
|
162
|
+
|
|
163
|
+
metadata_text = self._display._format_bottom_metadata(
|
|
164
|
+
bottom_metadata_items,
|
|
165
|
+
None,
|
|
166
|
+
config_map["highlight_color"],
|
|
167
|
+
max_width=available,
|
|
168
|
+
)
|
|
169
|
+
|
|
170
|
+
line = Text()
|
|
171
|
+
line.append_text(prefix)
|
|
172
|
+
line.append_text(metadata_text)
|
|
173
|
+
line.append_text(suffix)
|
|
174
|
+
remaining = total_width - line.cell_len
|
|
175
|
+
if remaining > 0:
|
|
176
|
+
line.append("─" * remaining, style="dim")
|
|
177
|
+
console.console.print(line, markup=self._markup)
|
|
178
|
+
console.console.print()
|
|
179
|
+
else:
|
|
180
|
+
self._display.display_message(
|
|
181
|
+
content=content,
|
|
182
|
+
message_type=MessageType.TOOL_RESULT,
|
|
183
|
+
name=name,
|
|
184
|
+
right_info=right_info,
|
|
185
|
+
bottom_metadata=bottom_metadata,
|
|
186
|
+
is_error=result.isError,
|
|
187
|
+
truncate_content=True,
|
|
188
|
+
)
|
|
189
|
+
|
|
190
|
+
def show_tool_call(
|
|
191
|
+
self,
|
|
192
|
+
tool_name: str,
|
|
193
|
+
tool_args: dict[str, Any] | None,
|
|
194
|
+
*,
|
|
195
|
+
bottom_items: list[str] | None = None,
|
|
196
|
+
highlight_index: int | None = None,
|
|
197
|
+
max_item_length: int | None = None,
|
|
198
|
+
name: str | None = None,
|
|
199
|
+
metadata: dict[str, Any] | None = None,
|
|
200
|
+
) -> None:
|
|
201
|
+
"""Display a tool call header and body."""
|
|
202
|
+
config = self._display.config
|
|
203
|
+
if not config or not config.logger.show_tools:
|
|
204
|
+
return
|
|
205
|
+
|
|
206
|
+
tool_args = tool_args or {}
|
|
207
|
+
metadata = metadata or {}
|
|
208
|
+
|
|
209
|
+
right_info = f"[dim]tool request - {tool_name}[/dim]"
|
|
210
|
+
content: Any = tool_args
|
|
211
|
+
pre_content: Text | None = None
|
|
212
|
+
truncate_content = True
|
|
213
|
+
|
|
214
|
+
if metadata.get("variant") == "shell":
|
|
215
|
+
bottom_items = list()
|
|
216
|
+
max_item_length = 50
|
|
217
|
+
command = metadata.get("command") or tool_args.get("command")
|
|
218
|
+
|
|
219
|
+
command_text = Text()
|
|
220
|
+
if command and isinstance(command, str):
|
|
221
|
+
command_text.append("$ ", style="magenta")
|
|
222
|
+
command_text.append(command, style="white")
|
|
223
|
+
else:
|
|
224
|
+
command_text.append("$ ", style="magenta")
|
|
225
|
+
command_text.append("(no shell command provided)", style="dim")
|
|
226
|
+
|
|
227
|
+
content = command_text
|
|
228
|
+
|
|
229
|
+
shell_name = metadata.get("shell_name") or "shell"
|
|
230
|
+
shell_path = metadata.get("shell_path")
|
|
231
|
+
if shell_path:
|
|
232
|
+
bottom_items.append(str(shell_path))
|
|
233
|
+
|
|
234
|
+
right_parts: list[str] = []
|
|
235
|
+
if shell_path and shell_path != shell_name:
|
|
236
|
+
right_parts.append(f"{shell_name} ({shell_path})")
|
|
237
|
+
elif shell_name:
|
|
238
|
+
right_parts.append(shell_name)
|
|
239
|
+
|
|
240
|
+
right_info = f"[dim]{' | '.join(right_parts)}[/dim]" if right_parts else ""
|
|
241
|
+
truncate_content = False
|
|
242
|
+
|
|
243
|
+
working_dir_display = metadata.get("working_dir_display") or metadata.get("working_dir")
|
|
244
|
+
if working_dir_display:
|
|
245
|
+
bottom_items.append(f"cwd: {working_dir_display}")
|
|
246
|
+
|
|
247
|
+
timeout_seconds = metadata.get("timeout_seconds")
|
|
248
|
+
warning_interval = metadata.get("warning_interval_seconds")
|
|
249
|
+
|
|
250
|
+
if timeout_seconds and warning_interval:
|
|
251
|
+
bottom_items.append(
|
|
252
|
+
f"timeout: {timeout_seconds}s, warning every {warning_interval}s"
|
|
253
|
+
)
|
|
254
|
+
|
|
255
|
+
self._display.display_message(
|
|
256
|
+
content=content,
|
|
257
|
+
message_type=MessageType.TOOL_CALL,
|
|
258
|
+
name=name,
|
|
259
|
+
pre_content=pre_content,
|
|
260
|
+
right_info=right_info,
|
|
261
|
+
bottom_metadata=bottom_items,
|
|
262
|
+
highlight_index=highlight_index,
|
|
263
|
+
max_item_length=max_item_length,
|
|
264
|
+
truncate_content=truncate_content,
|
|
265
|
+
)
|
|
266
|
+
|
|
267
|
+
async def show_tool_update(self, updated_server: str, *, agent_name: str | None = None) -> None:
|
|
268
|
+
"""Show a background tool update notification."""
|
|
269
|
+
config = self._display.config
|
|
270
|
+
if not config or not config.logger.show_tools:
|
|
271
|
+
return
|
|
272
|
+
|
|
273
|
+
try:
|
|
274
|
+
from prompt_toolkit.application.current import get_app
|
|
275
|
+
|
|
276
|
+
app = get_app()
|
|
277
|
+
from fast_agent.ui import notification_tracker
|
|
278
|
+
|
|
279
|
+
notification_tracker.add_tool_update(updated_server)
|
|
280
|
+
app.invalidate()
|
|
281
|
+
except Exception: # noqa: BLE001
|
|
282
|
+
if agent_name:
|
|
283
|
+
left = f"[magenta]▎[/magenta][dim magenta]▶[/dim magenta] [magenta]{agent_name}[/magenta]"
|
|
284
|
+
else:
|
|
285
|
+
left = "[magenta]▎[/magenta][dim magenta]▶[/dim magenta]"
|
|
286
|
+
|
|
287
|
+
right = f"[dim]{updated_server}[/dim]"
|
|
288
|
+
self._display._create_combined_separator_status(left, right)
|
|
289
|
+
|
|
290
|
+
message = f"Updating tools for server {updated_server}"
|
|
291
|
+
console.console.print(message, style="dim", markup=self._markup)
|
|
292
|
+
|
|
293
|
+
console.console.print()
|
|
294
|
+
console.console.print("─" * console.console.size.width, style="dim")
|
|
295
|
+
console.console.print()
|
|
296
|
+
|
|
297
|
+
@staticmethod
|
|
298
|
+
def summarize_skybridge_configs(
|
|
299
|
+
configs: Mapping[str, "SkybridgeServerConfig"] | None,
|
|
300
|
+
) -> tuple[list[dict[str, Any]], list[str]]:
|
|
301
|
+
"""Convert Skybridge configs into display-ready structures."""
|
|
302
|
+
server_rows: list[dict[str, Any]] = []
|
|
303
|
+
warnings: list[str] = []
|
|
304
|
+
warning_seen: set[str] = set()
|
|
305
|
+
|
|
306
|
+
if not configs:
|
|
307
|
+
return server_rows, warnings
|
|
308
|
+
|
|
309
|
+
def add_warning(message: str) -> None:
|
|
310
|
+
formatted = message.strip()
|
|
311
|
+
if not formatted:
|
|
312
|
+
return
|
|
313
|
+
if formatted not in warning_seen:
|
|
314
|
+
warnings.append(formatted)
|
|
315
|
+
warning_seen.add(formatted)
|
|
316
|
+
|
|
317
|
+
for server_name in sorted(configs.keys()):
|
|
318
|
+
config = configs.get(server_name)
|
|
319
|
+
if not config:
|
|
320
|
+
continue
|
|
321
|
+
resources = list(config.ui_resources or [])
|
|
322
|
+
has_skybridge_signal = bool(
|
|
323
|
+
config.enabled or resources or config.tools or config.warnings
|
|
324
|
+
)
|
|
325
|
+
if not has_skybridge_signal:
|
|
326
|
+
continue
|
|
327
|
+
|
|
328
|
+
valid_resource_count = sum(1 for resource in resources if resource.is_skybridge)
|
|
329
|
+
|
|
330
|
+
server_rows.append(
|
|
331
|
+
{
|
|
332
|
+
"server_name": server_name,
|
|
333
|
+
"config": config,
|
|
334
|
+
"resources": resources,
|
|
335
|
+
"valid_resource_count": valid_resource_count,
|
|
336
|
+
"total_resource_count": len(resources),
|
|
337
|
+
"active_tools": [
|
|
338
|
+
{
|
|
339
|
+
"name": tool.display_name,
|
|
340
|
+
"template": str(tool.template_uri) if tool.template_uri else None,
|
|
341
|
+
}
|
|
342
|
+
for tool in config.tools
|
|
343
|
+
if tool.is_valid
|
|
344
|
+
],
|
|
345
|
+
"enabled": config.enabled,
|
|
346
|
+
}
|
|
347
|
+
)
|
|
348
|
+
|
|
349
|
+
for warning in config.warnings:
|
|
350
|
+
message = warning.strip()
|
|
351
|
+
if not message:
|
|
352
|
+
continue
|
|
353
|
+
if not message.startswith(server_name):
|
|
354
|
+
message = f"{server_name} {message}"
|
|
355
|
+
add_warning(message)
|
|
356
|
+
|
|
357
|
+
return server_rows, warnings
|
|
358
|
+
|
|
359
|
+
def show_skybridge_summary(
|
|
360
|
+
self,
|
|
361
|
+
agent_name: str,
|
|
362
|
+
configs: Mapping[str, "SkybridgeServerConfig"] | None,
|
|
363
|
+
) -> None:
|
|
364
|
+
"""Display aggregated Skybridge status."""
|
|
365
|
+
server_rows, warnings = self.summarize_skybridge_configs(configs)
|
|
366
|
+
|
|
367
|
+
if not server_rows and not warnings:
|
|
368
|
+
return
|
|
369
|
+
|
|
370
|
+
heading = "[dim]OpenAI Apps SDK ([/dim][cyan]skybridge[/cyan][dim]) detected:[/dim]"
|
|
371
|
+
console.console.print()
|
|
372
|
+
console.console.print(heading, markup=self._markup)
|
|
373
|
+
|
|
374
|
+
if not server_rows:
|
|
375
|
+
console.console.print("[dim] ● none detected[/dim]", markup=self._markup)
|
|
376
|
+
else:
|
|
377
|
+
for row in server_rows:
|
|
378
|
+
server_name = row["server_name"]
|
|
379
|
+
resource_count = row["valid_resource_count"]
|
|
380
|
+
tool_infos = row["active_tools"]
|
|
381
|
+
enabled = row["enabled"]
|
|
382
|
+
|
|
383
|
+
tool_count = len(tool_infos)
|
|
384
|
+
tool_word = "tool" if tool_count == 1 else "tools"
|
|
385
|
+
resource_word = (
|
|
386
|
+
"skybridge resource" if resource_count == 1 else "skybridge resources"
|
|
387
|
+
)
|
|
388
|
+
tool_segment = f"[cyan]{tool_count}[/cyan][dim] {tool_word}[/dim]"
|
|
389
|
+
resource_segment = f"[cyan]{resource_count}[/cyan][dim] {resource_word}[/dim]"
|
|
390
|
+
name_style = "cyan" if enabled else "yellow"
|
|
391
|
+
status_suffix = "" if enabled else "[dim] (issues detected)[/dim]"
|
|
392
|
+
|
|
393
|
+
console.console.print(
|
|
394
|
+
f"[dim] ● [/dim][{name_style}]{server_name}[/{name_style}]{status_suffix}"
|
|
395
|
+
f"[dim] — [/dim]{tool_segment}[dim], [/dim]{resource_segment}",
|
|
396
|
+
markup=self._markup,
|
|
397
|
+
)
|
|
398
|
+
|
|
399
|
+
if tool_infos:
|
|
400
|
+
for tool in tool_infos:
|
|
401
|
+
template_info = (
|
|
402
|
+
f" [dim]({tool['template']})[/dim]" if tool["template"] else ""
|
|
403
|
+
)
|
|
404
|
+
console.console.print(
|
|
405
|
+
f"[dim] · [/dim]{tool['name']}{template_info}", markup=self._markup
|
|
406
|
+
)
|
|
407
|
+
else:
|
|
408
|
+
console.console.print("[dim] · no active tools[/dim]", markup=self._markup)
|
|
409
|
+
|
|
410
|
+
if warnings:
|
|
411
|
+
console.console.print()
|
|
412
|
+
console.console.print(
|
|
413
|
+
"[yellow]Warnings[/yellow]",
|
|
414
|
+
markup=self._markup,
|
|
415
|
+
)
|
|
416
|
+
for warning in warnings:
|
|
417
|
+
console.console.print(f"[yellow]- {warning}[/yellow]", markup=self._markup)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: fast-agent-mcp
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.17
|
|
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
|
|
@@ -209,18 +209,18 @@ Classifier: License :: OSI Approved :: Apache Software License
|
|
|
209
209
|
Classifier: Operating System :: OS Independent
|
|
210
210
|
Classifier: Programming Language :: Python :: 3
|
|
211
211
|
Requires-Python: <3.14,>=3.13.5
|
|
212
|
-
Requires-Dist: a2a-sdk>=0.3.
|
|
213
|
-
Requires-Dist: aiohttp>=3.
|
|
214
|
-
Requires-Dist: anthropic>=0.
|
|
212
|
+
Requires-Dist: a2a-sdk>=0.3.10
|
|
213
|
+
Requires-Dist: aiohttp>=3.13.1
|
|
214
|
+
Requires-Dist: anthropic>=0.71.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.
|
|
220
|
+
Requires-Dist: google-genai>=1.46.0
|
|
221
221
|
Requires-Dist: keyring>=24.3.1
|
|
222
|
-
Requires-Dist: mcp==1.
|
|
223
|
-
Requires-Dist: openai>=2.
|
|
222
|
+
Requires-Dist: mcp==1.19.0
|
|
223
|
+
Requires-Dist: openai[aiohttp]>=2.6.1
|
|
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'
|
|
@@ -231,6 +231,7 @@ Requires-Dist: prompt-toolkit>=3.0.52
|
|
|
231
231
|
Requires-Dist: pydantic-settings>=2.7.0
|
|
232
232
|
Requires-Dist: pydantic>=2.10.4
|
|
233
233
|
Requires-Dist: pyperclip>=1.9.0
|
|
234
|
+
Requires-Dist: python-frontmatter>=1.1.0
|
|
234
235
|
Requires-Dist: pyyaml>=6.0.2
|
|
235
236
|
Requires-Dist: rich>=14.1.0
|
|
236
237
|
Requires-Dist: tensorzero>=2025.7.5
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
fast_agent/__init__.py,sha256=
|
|
2
|
-
fast_agent/config.py,sha256=
|
|
3
|
-
fast_agent/constants.py,sha256=
|
|
4
|
-
fast_agent/context.py,sha256=
|
|
1
|
+
fast_agent/__init__.py,sha256=rABG1ueyk4xCXxZUR8HLNXjvanSZpmrW2PD0Iipaj2w,4194
|
|
2
|
+
fast_agent/config.py,sha256=fESgE_maOmZ44_U1n22x-9E1AI70kZ1OC-d8vqgepno,25661
|
|
3
|
+
fast_agent/constants.py,sha256=3M07UrFW7ueA0QNAy7JJRXcYDzpv76EGF_08b8ADcig,662
|
|
4
|
+
fast_agent/context.py,sha256=Mt6AFuUR1anR6yOw1R9ZIuEQzFi82mvEfLwjKiP0IiM,9362
|
|
5
5
|
fast_agent/context_dependent.py,sha256=KU1eydVBoIt4bYOZroqxDgE1AUexDaZi7hurE26QsF4,1584
|
|
6
6
|
fast_agent/event_progress.py,sha256=iTGlD-tAG3n_mLnUr7h03nPMSZK8piyLeaA-IB9erBw,2064
|
|
7
|
-
fast_agent/interfaces.py,sha256=
|
|
7
|
+
fast_agent/interfaces.py,sha256=A01ibxAB9yejqYtZL-K_PJKZPuWsjlpu4_5JaUIBTag,7044
|
|
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
|
-
fast_agent/agents/agent_types.py,sha256=
|
|
12
|
-
fast_agent/agents/llm_agent.py,sha256=
|
|
13
|
-
fast_agent/agents/llm_decorator.py,sha256=
|
|
14
|
-
fast_agent/agents/mcp_agent.py,sha256=
|
|
11
|
+
fast_agent/agents/agent_types.py,sha256=dashrBG95dhK-54KMXKBGhQgDrgZ30L-wDnhSf1wIYQ,1956
|
|
12
|
+
fast_agent/agents/llm_agent.py,sha256=k29Zhl4lrfAi4YSF9_406KluFf7_IQVT0Fj_tA0rbGI,11737
|
|
13
|
+
fast_agent/agents/llm_decorator.py,sha256=riTrgX8L9blrrqncRL6Osc_IFKSs1XOLkOtjr6kVAFg,30377
|
|
14
|
+
fast_agent/agents/mcp_agent.py,sha256=lc3DgFwuCyStjFGtPBLmbeCsrOPCFWnlerGJD11o4LQ,45668
|
|
15
15
|
fast_agent/agents/tool_agent.py,sha256=8IcMeMzxNtgRWv2r6kz5AlRzzvDxFazPYV7krRP1rEA,9321
|
|
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
|
|
@@ -21,13 +21,13 @@ fast_agent/agents/workflow/orchestrator_prompts.py,sha256=EXKEI174sshkZyPPEnWbww
|
|
|
21
21
|
fast_agent/agents/workflow/parallel_agent.py,sha256=DlJXDURAfx-WBF297tKBLfH93gDFSAPUyEmJr7QNGyw,7476
|
|
22
22
|
fast_agent/agents/workflow/router_agent.py,sha256=gugcp0a-3Ldn42JbPJZ7AbO2G6FvqE0A3tsWcLorwSY,11400
|
|
23
23
|
fast_agent/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
24
|
-
fast_agent/cli/__main__.py,sha256=
|
|
25
|
-
fast_agent/cli/constants.py,sha256=
|
|
26
|
-
fast_agent/cli/main.py,sha256=
|
|
24
|
+
fast_agent/cli/__main__.py,sha256=OWuKPFEeZRco6j5VA3IvtwTvZ351pDGxuO6rAiOTFNI,2588
|
|
25
|
+
fast_agent/cli/constants.py,sha256=9XaMlY8hy7PuwDFmUg_22vGGVKYRfNpODL5pub1Wem4,659
|
|
26
|
+
fast_agent/cli/main.py,sha256=8wBh605HLcxyr11T_I8c5_LjHHGB2UcfiY2-3F8kRnY,4493
|
|
27
27
|
fast_agent/cli/terminal.py,sha256=tDN1fJ91Nc_wZJTNafkQuD7Z7gFscvo1PHh-t7Wl-5s,1066
|
|
28
28
|
fast_agent/cli/commands/auth.py,sha256=nJEC7zrz5UXYUz5O6AgGZnfJPHIrgHk68CUwGo-7Nyg,15063
|
|
29
|
-
fast_agent/cli/commands/check_config.py,sha256=
|
|
30
|
-
fast_agent/cli/commands/go.py,sha256=
|
|
29
|
+
fast_agent/cli/commands/check_config.py,sha256=Iy5MHsRXqRcFLN-0Gs20jA3DqT-gN1VE9WtKuWlxJ9M,32597
|
|
30
|
+
fast_agent/cli/commands/go.py,sha256=nNlFZ9dNPkm4VTkFmv1hDvWu8qbWsyTY5BEX32HJfmA,17580
|
|
31
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
|
|
@@ -35,11 +35,11 @@ fast_agent/cli/commands/url_parser.py,sha256=v9KoprPBEEST5Fo7qXgbW50GC5vMpxFteKq
|
|
|
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=Z8zM1Ep9THEiuNzlxW-WmQDm7x4JF0wn4xO2hbUKf1E,23055
|
|
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=4rsKQVuK3GRW9ejT7oSfqsrNsfYb2rPpBT0wJxk_-mM,35372
|
|
43
43
|
fast_agent/core/prompt.py,sha256=qNUFlK3KtU7leYysYUglzBYQnEYiXu__iR_T8189zc0,203
|
|
44
44
|
fast_agent/core/validation.py,sha256=cesQeT8jfLlPqew6S9bq8ZJqde7ViVQXHF9fhAnyOHI,11950
|
|
45
45
|
fast_agent/core/executor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -49,7 +49,7 @@ fast_agent/core/executor/workflow_signal.py,sha256=Cg1uZBk3fn8kXhPOg-wINNuVaf3v9
|
|
|
49
49
|
fast_agent/core/logging/__init__.py,sha256=dFW2bbTtz45zebUuQs7RVi7mg1RJm4DHH6TGfBMhW14,167
|
|
50
50
|
fast_agent/core/logging/events.py,sha256=WTjr26uIxtbxhnoLNPROVUIt0HNJrzK1g1fUMZ-zVsQ,4207
|
|
51
51
|
fast_agent/core/logging/json_serializer.py,sha256=kQDkwTHIkHSQgbhDOJhMoetNvfJVMZGOScaKoLX8kmw,5797
|
|
52
|
-
fast_agent/core/logging/listeners.py,sha256=
|
|
52
|
+
fast_agent/core/logging/listeners.py,sha256=1qxduxe5lkYYDxciJWItsWg0VC-5LOBttlx4B77ac60,9753
|
|
53
53
|
fast_agent/core/logging/logger.py,sha256=L-hLfUGFCIABoNYDiUkNHWvFxL6j-6zn5Pc5E7aC44M,11074
|
|
54
54
|
fast_agent/core/logging/transport.py,sha256=i_WYXk5mqyfetT72bCYrbdrMWcuL1HJCyeQKfQg7U2w,16994
|
|
55
55
|
fast_agent/history/history_exporter.py,sha256=oqkw7qC5rrW73u20tkIqt8yBWPoVzCTC61x2Q2rOKGs,1404
|
|
@@ -60,11 +60,11 @@ fast_agent/human_input/form_fields.py,sha256=IjStNO8DxyTokLKTmTeZw_pczsvL5ObQPQa
|
|
|
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=
|
|
64
|
-
fast_agent/llm/memory.py,sha256=
|
|
65
|
-
fast_agent/llm/model_database.py,sha256=
|
|
66
|
-
fast_agent/llm/model_factory.py,sha256=
|
|
67
|
-
fast_agent/llm/model_info.py,sha256=
|
|
63
|
+
fast_agent/llm/fastagent_llm.py,sha256=uGbuXTZlxKjjvG5VMfInK-asLtowqIdY4yP48HkJagI,27698
|
|
64
|
+
fast_agent/llm/memory.py,sha256=7mpoWxxFzRLgtU6IUs7TISH6yPe9eAwHAwRdete8mKo,9417
|
|
65
|
+
fast_agent/llm/model_database.py,sha256=0g8SifdlxueQZLa-p8ptJa6u1vRApZm1CbmIaU1Mvoc,13161
|
|
66
|
+
fast_agent/llm/model_factory.py,sha256=eQhRavl7G7eu6lpfcPQjAfLX2eKsfDKjlM80Q3eeGDg,13382
|
|
67
|
+
fast_agent/llm/model_info.py,sha256=eASLZ9_bClF7_2eOTmkNDG63yQoJHHtKDii9ZzT2a6o,3534
|
|
68
68
|
fast_agent/llm/prompt_utils.py,sha256=1WU67G-BFqftja5I8FKPMMzsvDk1K_1jDi9A9kkFdOg,4899
|
|
69
69
|
fast_agent/llm/provider_key_manager.py,sha256=O8jhoqzLgMbY57TbJxztNwElbsQPC0GMIwgiaz_5SuQ,3455
|
|
70
70
|
fast_agent/llm/provider_types.py,sha256=JyJoyyCI3htgX9VCvvyz2Lx9fBQtdrLbXma0oc9vfsw,1185
|
|
@@ -76,25 +76,26 @@ fast_agent/llm/internal/playback.py,sha256=HzV0BitORA977_3OWAbMZjLZpIHBKt-_PeOO3
|
|
|
76
76
|
fast_agent/llm/internal/silent.py,sha256=TVhjp0sEcPpR35n_QjYrMu0CKVX2humAt1GBR6y_itE,1563
|
|
77
77
|
fast_agent/llm/internal/slow.py,sha256=MQf21cK7aM0yPN1_j1hSJRTEp4UGbrPo_sCP81WDcxQ,1310
|
|
78
78
|
fast_agent/llm/provider/anthropic/anthropic_utils.py,sha256=zkeMpAlV9YW9pP1FObkyqR8wg8e-Xir9SCwsom94zao,3246
|
|
79
|
-
fast_agent/llm/provider/anthropic/llm_anthropic.py,sha256=
|
|
79
|
+
fast_agent/llm/provider/anthropic/llm_anthropic.py,sha256=DEVDoWnECubyWaiKadQUhHxkUKtfFl_uG5VoEOYeHSQ,32999
|
|
80
80
|
fast_agent/llm/provider/anthropic/multipart_converter_anthropic.py,sha256=szHqhd5i-OclNWM7EHVT66kTiHJ5B0y1qd-JqgJIOO4,16529
|
|
81
81
|
fast_agent/llm/provider/bedrock/bedrock_utils.py,sha256=mqWCCeB1gUQSL2KRUMqpFjvHZ0ZTJugCsd5YOrx6U30,7750
|
|
82
82
|
fast_agent/llm/provider/bedrock/llm_bedrock.py,sha256=Yl3luBfgM4wNGuMpPN9yg8DGHr_ncfYg0EemvKi2Rxc,100199
|
|
83
83
|
fast_agent/llm/provider/google/google_converter.py,sha256=cGb2ty_uBgdATa0Nib_BzvEbWCpBf3Mwzu9pMxMziA8,17599
|
|
84
|
-
fast_agent/llm/provider/google/llm_google_native.py,sha256=
|
|
84
|
+
fast_agent/llm/provider/google/llm_google_native.py,sha256=LcrM1ywDHFUFYxHCWKtBwlySJKTQWrtRMJM0fp14pqc,29101
|
|
85
85
|
fast_agent/llm/provider/openai/llm_aliyun.py,sha256=ti7VHTpwl0AG3ytwBERpDzVtacvCfamKnl2bAnTE96s,1213
|
|
86
86
|
fast_agent/llm/provider/openai/llm_azure.py,sha256=dePpuOf7yD4-zQc1PEHm4yaVznrZe9RaIz7nxsbZhlU,6061
|
|
87
87
|
fast_agent/llm/provider/openai/llm_deepseek.py,sha256=aAMX7pd1qDfl54Z9pLvJTVYETc4yKKMRYrEMiPIhd7w,3762
|
|
88
88
|
fast_agent/llm/provider/openai/llm_generic.py,sha256=O_mmu3o9LeAZ6Kp405I-GfwrS8AuVkyX3tT6aCDCfLY,1168
|
|
89
89
|
fast_agent/llm/provider/openai/llm_google_oai.py,sha256=u1yZVeDds9z2hvydz_kUpFe2RANTNwEtlPgB-OEmgrY,1095
|
|
90
90
|
fast_agent/llm/provider/openai/llm_groq.py,sha256=trNSy3T94_fJWAhVn51iESP_J7sQh_23ufVegKKNHBs,5247
|
|
91
|
-
fast_agent/llm/provider/openai/llm_openai.py,sha256=
|
|
91
|
+
fast_agent/llm/provider/openai/llm_openai.py,sha256=Ql3XgAKD9iNePVrspfLlITjgWzAbsdG-8UYU3lpRkJo,41583
|
|
92
92
|
fast_agent/llm/provider/openai/llm_openrouter.py,sha256=RBTUkNBRqE8WoucCoVnXP5GhnMwc2tiRacXbMHVf1xM,1943
|
|
93
93
|
fast_agent/llm/provider/openai/llm_tensorzero_openai.py,sha256=bG1paNw-OWf0SUGfHvhx1SJ1C-nn_sDZkFVJ_e3kJYc,5457
|
|
94
94
|
fast_agent/llm/provider/openai/llm_xai.py,sha256=fEyO9XlU3Ef1a-cXdJl0Qe-FmE562cA-UJOGvzqLO6M,1375
|
|
95
95
|
fast_agent/llm/provider/openai/multipart_converter_openai.py,sha256=M7cbM4F8_xycPtVHJv1kBYYBX7KRXyYPCDb1YKQEgo0,20925
|
|
96
96
|
fast_agent/llm/provider/openai/openai_multipart.py,sha256=uuoRMYWiznYksBODbknBuqe65UxEHE1h7AphHpdnCCM,6864
|
|
97
97
|
fast_agent/llm/provider/openai/openai_utils.py,sha256=RI9UgF7SGkZ02bAep7glvLy3erbismmZp7wXDsRoJPQ,2034
|
|
98
|
+
fast_agent/llm/provider/openai/responses.py,sha256=3xDE4F8nIZKpXDLBb1Ai5lFbIltHJJ5SSlzjKCfHxqU,5092
|
|
98
99
|
fast_agent/mcp/__init__.py,sha256=Q-86MBawKmB602VMut8U3uqUQDOrTAMx2HmHKnWT32Q,1371
|
|
99
100
|
fast_agent/mcp/common.py,sha256=MpSC0fLO21RcDz4VApah4C8_LisVGz7OXkR17Xw-9mY,431
|
|
100
101
|
fast_agent/mcp/elicitation_factory.py,sha256=d4unxJyR0S-qH05yBZ_oQ08XLBToFtUzzFFYvv0wLrY,3172
|
|
@@ -185,33 +186,40 @@ fast_agent/resources/examples/workflows/router.py,sha256=_xVOLzSHY3ZcNfUjvtqVrki
|
|
|
185
186
|
fast_agent/resources/examples/workflows/short_story.md,sha256=XN9I2kzCcMmke3dE5F2lyRH5iFUZUQ8Sy-hS3rm_Wlc,1153
|
|
186
187
|
fast_agent/resources/examples/workflows/short_story.txt,sha256=X3y_1AyhLFN2AKzCKvucJtDgAFIJfnlbsbGZO5bBWu0,1187
|
|
187
188
|
fast_agent/resources/setup/.gitignore,sha256=bksf0bkvBXtm3F5Nd4F9FB2LaO2RcTbHujYWjq5JKPo,305
|
|
188
|
-
fast_agent/resources/setup/agent.py,sha256=
|
|
189
|
-
fast_agent/resources/setup/fastagent.config.yaml,sha256=
|
|
189
|
+
fast_agent/resources/setup/agent.py,sha256=WcF05fn2oKzYjIRSrqHtnIl7AfuA6y4eXyjx7zfejmQ,535
|
|
190
|
+
fast_agent/resources/setup/fastagent.config.yaml,sha256=sTLPhq6PV6fsFYQPum6TDFFYAgztIXb7Krh8lrerXjM,1939
|
|
190
191
|
fast_agent/resources/setup/fastagent.secrets.yaml.example,sha256=ht-i2_SpAyeXG2OnG_vOA1n7gRsGIInxp9g5Nio-jpI,1038
|
|
191
192
|
fast_agent/resources/setup/pyproject.toml.tmpl,sha256=SxyVPXbtD67yFOx9wIrzq6Yxo4W2PkSR1rrnPkmpjwA,478
|
|
193
|
+
fast_agent/skills/__init__.py,sha256=3BaJ4be9MtYIglPJoCd2yUxdj86iDMTP-ljGCcSjfKM,200
|
|
194
|
+
fast_agent/skills/registry.py,sha256=K8dbjSIoSZav-Z0_PZceng3eKAyD8bI3w8O1Z0LfBiM,7615
|
|
192
195
|
fast_agent/tools/elicitation.py,sha256=8FaNvuN__LAM328VSJ5T4Bg3m8auHraqYvIYv6Eh4KU,13464
|
|
196
|
+
fast_agent/tools/shell_runtime.py,sha256=T9gIpPSWbteDjIWPS3fhGPz09whkqVGKt4FpisHRd9Y,17940
|
|
193
197
|
fast_agent/types/__init__.py,sha256=y-53m-C4drf4Rx8Bbnk_GAhko9LdNYCyRUWya8e0mos,1004
|
|
194
198
|
fast_agent/types/llm_stop_reason.py,sha256=bWe97OfhALUe8uQeAQOnTdPlYzJiabIfo8u38kPgj3Q,2293
|
|
195
199
|
fast_agent/ui/__init__.py,sha256=MXxTQjFdF7mI_3JHxBPd-aoZYLlxV_-51-Trqgv5-3w,1104
|
|
196
200
|
fast_agent/ui/console.py,sha256=Gjf2QLFumwG1Lav__c07X_kZxxEUSkzV-1_-YbAwcwo,813
|
|
197
|
-
fast_agent/ui/console_display.py,sha256=
|
|
198
|
-
fast_agent/ui/elicitation_form.py,sha256=
|
|
199
|
-
fast_agent/ui/elicitation_style.py,sha256
|
|
200
|
-
fast_agent/ui/enhanced_prompt.py,sha256=
|
|
201
|
-
fast_agent/ui/history_display.py,sha256=
|
|
202
|
-
fast_agent/ui/interactive_prompt.py,sha256=
|
|
203
|
-
fast_agent/ui/
|
|
201
|
+
fast_agent/ui/console_display.py,sha256=VzB_bvGvtq2RyAID9xlxo1JNF8cKeeYwObSTsyZlCEQ,40470
|
|
202
|
+
fast_agent/ui/elicitation_form.py,sha256=QieYhLnRwBfwu7ochQ8RotKRTkH8UoSJ1GkA0Mc1zaU,32893
|
|
203
|
+
fast_agent/ui/elicitation_style.py,sha256=rS0qSS5c6if97STud4jKahs0HLvh9I6MVL1swDyCvck,3943
|
|
204
|
+
fast_agent/ui/enhanced_prompt.py,sha256=FvmRvEPf5KJMeMAYi_KDUiccm82H288Y6D7NRubmP8s,52722
|
|
205
|
+
fast_agent/ui/history_display.py,sha256=5vgH9FcIwG2u2BCGvwLcZPBTokPs_LY_P1-0EQsal0o,19618
|
|
206
|
+
fast_agent/ui/interactive_prompt.py,sha256=1DQDhwEm6ZdUw0avUmg_o17IVunzCZTm6RZIPNRvHFE,52381
|
|
207
|
+
fast_agent/ui/markdown_helpers.py,sha256=r42hbwiGxYA1Xwf5o_BoP0k8d52aT_eZ_x6xNfDuCWU,3497
|
|
208
|
+
fast_agent/ui/markdown_truncator.py,sha256=1MFQ64WwL8lWDmnoswjHmz2X-bDwG9Uu_jFf0hmchdU,42071
|
|
204
209
|
fast_agent/ui/mcp_display.py,sha256=pRFbYdTYci0AIl98NJO4v6cwZ-EW4FNa8PP4yKhmYrU,30798
|
|
205
210
|
fast_agent/ui/mcp_ui_utils.py,sha256=hV7z-yHX86BgdH6CMmN5qyOUjyiegQXLJOa5n5A1vQs,8476
|
|
206
211
|
fast_agent/ui/mermaid_utils.py,sha256=MpcRyVCPMTwU1XeIxnyFg0fQLjcyXZduWRF8NhEqvXE,5332
|
|
212
|
+
fast_agent/ui/message_primitives.py,sha256=0w5QTGjG409YBsDADZfk7F78JbiucpjURj3MYn7-Pqk,1211
|
|
207
213
|
fast_agent/ui/notification_tracker.py,sha256=-hiBwR47SdnwhvrGIXcgsVaqMlMudmrKAf9Xi_E5Eok,5850
|
|
208
214
|
fast_agent/ui/plain_text_truncator.py,sha256=mx24CuxHq8Vy2r7IGOmGRhVkEZHyyWNsy8ZU0m3YxdA,2326
|
|
209
215
|
fast_agent/ui/progress_display.py,sha256=hajDob65PttiJ2mPS6FsCtnmTcnyvDWGn-UqQboXqkQ,361
|
|
210
216
|
fast_agent/ui/rich_progress.py,sha256=s0HAaZHR3R7ubqtV20SX64RmkwvGCLXuJ8y29VjVKZs,7870
|
|
217
|
+
fast_agent/ui/streaming.py,sha256=SNLGx6s8xuRikxi6vNxnDCgQQKqFJ5rbTKU9ixnzmY0,22190
|
|
211
218
|
fast_agent/ui/streaming_buffer.py,sha256=e-zwVUVBOQ_mKyHgLiTXFmShGs4DNQRZ9BZZwWgXoWM,16648
|
|
219
|
+
fast_agent/ui/tool_display.py,sha256=DK6kA8MBjxq8qpK1WLv7kFKAfOtEOfY5rtQ8t4XeM0s,16111
|
|
212
220
|
fast_agent/ui/usage_display.py,sha256=ltJpn_sDzo8PDNSXWx-QdEUbQWUnhmajCItNt5mA5rM,7285
|
|
213
|
-
fast_agent_mcp-0.3.
|
|
214
|
-
fast_agent_mcp-0.3.
|
|
215
|
-
fast_agent_mcp-0.3.
|
|
216
|
-
fast_agent_mcp-0.3.
|
|
217
|
-
fast_agent_mcp-0.3.
|
|
221
|
+
fast_agent_mcp-0.3.17.dist-info/METADATA,sha256=DyQQDnwC9okrklDtQ5MDxTxCrnRV_Z07SUQFJImJZ88,32083
|
|
222
|
+
fast_agent_mcp-0.3.17.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
223
|
+
fast_agent_mcp-0.3.17.dist-info/entry_points.txt,sha256=i6Ujja9J-hRxttOKqTYdbYP_tyaS4gLHg53vupoCSsg,199
|
|
224
|
+
fast_agent_mcp-0.3.17.dist-info/licenses/LICENSE,sha256=Gx1L3axA4PnuK4FxsbX87jQ1opoOkSFfHHSytW6wLUU,10935
|
|
225
|
+
fast_agent_mcp-0.3.17.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|