mcp-windows 0.0.1__tar.gz
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.
- mcp_windows-0.0.1/.gitignore +10 -0
- mcp_windows-0.0.1/.python-version +1 -0
- mcp_windows-0.0.1/PKG-INFO +84 -0
- mcp_windows-0.0.1/README.md +66 -0
- mcp_windows-0.0.1/pyproject.toml +28 -0
- mcp_windows-0.0.1/src/mcp_windows/__init__.py +4 -0
- mcp_windows-0.0.1/src/mcp_windows/appid.py +34 -0
- mcp_windows-0.0.1/src/mcp_windows/main.py +18 -0
- mcp_windows-0.0.1/src/mcp_windows/media.py +70 -0
- mcp_windows-0.0.1/src/mcp_windows/monitors.py +35 -0
- mcp_windows-0.0.1/src/mcp_windows/notifications.py +38 -0
- mcp_windows-0.0.1/src/mcp_windows/window_management.py +140 -0
- mcp_windows-0.0.1/uv.lock +540 -0
@@ -0,0 +1 @@
|
|
1
|
+
3.13
|
@@ -0,0 +1,84 @@
|
|
1
|
+
Metadata-Version: 2.4
|
2
|
+
Name: mcp-windows
|
3
|
+
Version: 0.0.1
|
4
|
+
Summary: Add your description here
|
5
|
+
Author-email: TerminalMan <84923604+SecretiveShell@users.noreply.github.com>
|
6
|
+
Requires-Python: >=3.13
|
7
|
+
Requires-Dist: fastmcp>=2.2.0
|
8
|
+
Requires-Dist: mcp>=1.6.0
|
9
|
+
Requires-Dist: psutil>=7.0.0
|
10
|
+
Requires-Dist: pywin32>=310
|
11
|
+
Requires-Dist: winrt-runtime>=3.1.0
|
12
|
+
Requires-Dist: winrt-windows-data-xml-dom>=3.1.0
|
13
|
+
Requires-Dist: winrt-windows-foundation-collections>=3.1.0
|
14
|
+
Requires-Dist: winrt-windows-foundation>=3.1.0
|
15
|
+
Requires-Dist: winrt-windows-media-control>=3.1.0
|
16
|
+
Requires-Dist: winrt-windows-ui-notifications>=3.1.0
|
17
|
+
Description-Content-Type: text/markdown
|
18
|
+
|
19
|
+
# mcp-windows
|
20
|
+
|
21
|
+
MCP server for the windows API.
|
22
|
+
|
23
|
+
## Installation
|
24
|
+
|
25
|
+
add this to your claude mcp config:
|
26
|
+
|
27
|
+
```json
|
28
|
+
{
|
29
|
+
"mcpServers": {
|
30
|
+
"windows": {
|
31
|
+
"command": "uvx",
|
32
|
+
"args": [
|
33
|
+
"mcp-windows"
|
34
|
+
]
|
35
|
+
}
|
36
|
+
}
|
37
|
+
}
|
38
|
+
|
39
|
+
or locally:
|
40
|
+
|
41
|
+
```json
|
42
|
+
{
|
43
|
+
"mcpServers": {
|
44
|
+
"windows": {
|
45
|
+
"command": "uv",
|
46
|
+
"args": [
|
47
|
+
"--directory",
|
48
|
+
"C:\\Users\\{name}\\Documents\\mcp-windows",
|
49
|
+
"run",
|
50
|
+
"mcp-windows"
|
51
|
+
]
|
52
|
+
}
|
53
|
+
}
|
54
|
+
}
|
55
|
+
```
|
56
|
+
|
57
|
+
## Features
|
58
|
+
|
59
|
+
### Media
|
60
|
+
|
61
|
+
- get_media_sessions
|
62
|
+
- pause
|
63
|
+
- play
|
64
|
+
|
65
|
+
### Notifications
|
66
|
+
|
67
|
+
- send_toast
|
68
|
+
|
69
|
+
### Window Management
|
70
|
+
|
71
|
+
- get_foreground_window_info
|
72
|
+
- get_window_list
|
73
|
+
- focus_window
|
74
|
+
- close_window
|
75
|
+
- minimize_window
|
76
|
+
|
77
|
+
### Monitors
|
78
|
+
|
79
|
+
- sleep_monitors
|
80
|
+
- wake_monitors
|
81
|
+
|
82
|
+
## License
|
83
|
+
|
84
|
+
MIT
|
@@ -0,0 +1,66 @@
|
|
1
|
+
# mcp-windows
|
2
|
+
|
3
|
+
MCP server for the windows API.
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
add this to your claude mcp config:
|
8
|
+
|
9
|
+
```json
|
10
|
+
{
|
11
|
+
"mcpServers": {
|
12
|
+
"windows": {
|
13
|
+
"command": "uvx",
|
14
|
+
"args": [
|
15
|
+
"mcp-windows"
|
16
|
+
]
|
17
|
+
}
|
18
|
+
}
|
19
|
+
}
|
20
|
+
|
21
|
+
or locally:
|
22
|
+
|
23
|
+
```json
|
24
|
+
{
|
25
|
+
"mcpServers": {
|
26
|
+
"windows": {
|
27
|
+
"command": "uv",
|
28
|
+
"args": [
|
29
|
+
"--directory",
|
30
|
+
"C:\\Users\\{name}\\Documents\\mcp-windows",
|
31
|
+
"run",
|
32
|
+
"mcp-windows"
|
33
|
+
]
|
34
|
+
}
|
35
|
+
}
|
36
|
+
}
|
37
|
+
```
|
38
|
+
|
39
|
+
## Features
|
40
|
+
|
41
|
+
### Media
|
42
|
+
|
43
|
+
- get_media_sessions
|
44
|
+
- pause
|
45
|
+
- play
|
46
|
+
|
47
|
+
### Notifications
|
48
|
+
|
49
|
+
- send_toast
|
50
|
+
|
51
|
+
### Window Management
|
52
|
+
|
53
|
+
- get_foreground_window_info
|
54
|
+
- get_window_list
|
55
|
+
- focus_window
|
56
|
+
- close_window
|
57
|
+
- minimize_window
|
58
|
+
|
59
|
+
### Monitors
|
60
|
+
|
61
|
+
- sleep_monitors
|
62
|
+
- wake_monitors
|
63
|
+
|
64
|
+
## License
|
65
|
+
|
66
|
+
MIT
|
@@ -0,0 +1,28 @@
|
|
1
|
+
[project]
|
2
|
+
name = "mcp-windows"
|
3
|
+
version = "0.0.1"
|
4
|
+
description = "Add your description here"
|
5
|
+
readme = "README.md"
|
6
|
+
authors = [
|
7
|
+
{ name = "TerminalMan", email = "84923604+SecretiveShell@users.noreply.github.com" }
|
8
|
+
]
|
9
|
+
requires-python = ">=3.13"
|
10
|
+
dependencies = [
|
11
|
+
"fastmcp>=2.2.0",
|
12
|
+
"mcp>=1.6.0",
|
13
|
+
"psutil>=7.0.0",
|
14
|
+
"pywin32>=310",
|
15
|
+
"winrt-runtime>=3.1.0",
|
16
|
+
"winrt-windows-data-xml-dom>=3.1.0",
|
17
|
+
"winrt-windows-foundation>=3.1.0",
|
18
|
+
"winrt-windows-foundation-collections>=3.1.0",
|
19
|
+
"winrt-windows-media-control>=3.1.0",
|
20
|
+
"winrt-windows-ui-notifications>=3.1.0",
|
21
|
+
]
|
22
|
+
|
23
|
+
[project.scripts]
|
24
|
+
mcp-windows = "mcp_windows:main"
|
25
|
+
|
26
|
+
[build-system]
|
27
|
+
requires = ["hatchling"]
|
28
|
+
build-backend = "hatchling.build"
|
@@ -0,0 +1,34 @@
|
|
1
|
+
"""this script registers a start menu shortcut for the MCP Windows app with a custom AppUserModelID.
|
2
|
+
This is necessary for the app to be able to send windows toast notifications due to some legacy UWP API
|
3
|
+
limitations.
|
4
|
+
|
5
|
+
If you press the windows key and type "mcp" in the start menu, you should see the MCP Windows app icon."""
|
6
|
+
|
7
|
+
import os
|
8
|
+
import sys
|
9
|
+
from win32com.client import Dispatch
|
10
|
+
import pythoncom
|
11
|
+
|
12
|
+
APP_ID = "mcp-windows"
|
13
|
+
SHORTCUT_PATH = os.path.join(
|
14
|
+
os.environ["APPDATA"],
|
15
|
+
r"Microsoft\Windows\Start Menu\Programs\MCP Windows.lnk"
|
16
|
+
)
|
17
|
+
|
18
|
+
STGM_READWRITE = 0x00000002
|
19
|
+
|
20
|
+
def register_app_id():
|
21
|
+
shell = Dispatch("WScript.Shell")
|
22
|
+
shortcut = shell.CreateShortcut(SHORTCUT_PATH)
|
23
|
+
shortcut.TargetPath = sys.executable
|
24
|
+
shortcut.WorkingDirectory = os.getcwd()
|
25
|
+
shortcut.IconLocation = sys.executable
|
26
|
+
shortcut.Save()
|
27
|
+
|
28
|
+
# Add AppUserModelID
|
29
|
+
from win32com.propsys import propsys, pscon
|
30
|
+
property_store = propsys.SHGetPropertyStoreFromParsingName(SHORTCUT_PATH, None, STGM_READWRITE)
|
31
|
+
property_store.SetValue(pscon.PKEY_AppUserModel_ID, propsys.PROPVARIANTType(APP_ID, pythoncom.VT_LPWSTR))
|
32
|
+
property_store.Commit()
|
33
|
+
|
34
|
+
register_app_id()
|
@@ -0,0 +1,18 @@
|
|
1
|
+
from fastmcp import FastMCP
|
2
|
+
from os import environ
|
3
|
+
|
4
|
+
from mcp_windows.media import mcp as media_mcp
|
5
|
+
from mcp_windows.notifications import mcp as notifications_mcp
|
6
|
+
from mcp_windows.window_management import mcp as window_management_mcp
|
7
|
+
from mcp_windows.monitors import mcp as monitors_mcp
|
8
|
+
|
9
|
+
sep = environ.get("FASTMCP_TOOL_SEPARATOR", "_")
|
10
|
+
|
11
|
+
mcp: FastMCP = FastMCP(
|
12
|
+
name="windows",
|
13
|
+
)
|
14
|
+
|
15
|
+
mcp.mount("media", media_mcp, tool_separator=sep)
|
16
|
+
mcp.mount("notifications", notifications_mcp, tool_separator=sep)
|
17
|
+
mcp.mount("window_management", window_management_mcp, tool_separator=sep)
|
18
|
+
mcp.mount("monitors", monitors_mcp, tool_separator=sep)
|
@@ -0,0 +1,70 @@
|
|
1
|
+
import json
|
2
|
+
from fastmcp import FastMCP
|
3
|
+
from winrt.windows.media.control import GlobalSystemMediaTransportControlsSessionManager as MediaManager, GlobalSystemMediaTransportControlsSessionMediaProperties as MediaProperties
|
4
|
+
from winrt.windows.foundation import IAsyncOperation
|
5
|
+
|
6
|
+
mcp: FastMCP = FastMCP(
|
7
|
+
name="Media",
|
8
|
+
)
|
9
|
+
|
10
|
+
@mcp.tool("get_media_sessions")
|
11
|
+
async def get_media_sessions() -> str:
|
12
|
+
"""List all media playback sessions using windows media control API."""
|
13
|
+
|
14
|
+
manager_op: IAsyncOperation = MediaManager.request_async()
|
15
|
+
manager = await manager_op
|
16
|
+
sessions = manager.get_sessions()
|
17
|
+
|
18
|
+
output = {}
|
19
|
+
for session in sessions:
|
20
|
+
props_op = session.try_get_media_properties_async()
|
21
|
+
props: MediaProperties = await props_op
|
22
|
+
app_id = session.source_app_user_model_id
|
23
|
+
|
24
|
+
output[app_id] = {
|
25
|
+
"title": props.title or "unknown",
|
26
|
+
"artist": props.artist or "unknown",
|
27
|
+
"album_title": props.album_title or "unknown",
|
28
|
+
}
|
29
|
+
|
30
|
+
return json.dumps(output)
|
31
|
+
|
32
|
+
@mcp.tool("pause")
|
33
|
+
async def pause(app_id: str) -> str:
|
34
|
+
"""Pause the media playback for a given app_id using windows media control API."""
|
35
|
+
|
36
|
+
manager_op: IAsyncOperation[MediaManager] = \
|
37
|
+
MediaManager.request_async()
|
38
|
+
manager: MediaManager = await manager_op
|
39
|
+
|
40
|
+
sessions = manager.get_sessions()
|
41
|
+
for session in sessions:
|
42
|
+
if session.source_app_user_model_id.lower() == app_id.lower():
|
43
|
+
playback_info = session.get_playback_info()
|
44
|
+
if playback_info.controls.is_pause_enabled:
|
45
|
+
await session.try_pause_async()
|
46
|
+
return "Paused"
|
47
|
+
else:
|
48
|
+
return "Pause not available"
|
49
|
+
|
50
|
+
return "Session not found"
|
51
|
+
|
52
|
+
@mcp.tool("play")
|
53
|
+
async def play(app_id: str) -> str:
|
54
|
+
"""Play the media playback for a given app_id using windows media control API."""
|
55
|
+
|
56
|
+
manager_op: IAsyncOperation[MediaManager] = \
|
57
|
+
MediaManager.request_async()
|
58
|
+
manager: MediaManager = await manager_op
|
59
|
+
|
60
|
+
sessions = manager.get_sessions()
|
61
|
+
for session in sessions:
|
62
|
+
if session.source_app_user_model_id.lower() == app_id.lower():
|
63
|
+
playback_info = session.get_playback_info()
|
64
|
+
if playback_info.controls.is_play_enabled:
|
65
|
+
await session.try_play_async()
|
66
|
+
return "Playing"
|
67
|
+
else:
|
68
|
+
return "Play not available"
|
69
|
+
|
70
|
+
return "Session not found"
|
@@ -0,0 +1,35 @@
|
|
1
|
+
import ctypes
|
2
|
+
import win32con
|
3
|
+
import win32gui
|
4
|
+
|
5
|
+
from fastmcp import FastMCP
|
6
|
+
|
7
|
+
mcp: FastMCP = FastMCP(
|
8
|
+
name="monitors",
|
9
|
+
)
|
10
|
+
|
11
|
+
@mcp.tool("sleep_monitors")
|
12
|
+
async def sleep_monitors() -> str:
|
13
|
+
"""Put all monitors to sleep."""
|
14
|
+
try:
|
15
|
+
ctypes.windll.user32.SendMessageW(
|
16
|
+
win32con.HWND_BROADCAST,
|
17
|
+
win32con.WM_SYSCOMMAND,
|
18
|
+
win32con.SC_MONITORPOWER,
|
19
|
+
2 # 2 = power off
|
20
|
+
)
|
21
|
+
return "Monitors put to sleep"
|
22
|
+
except Exception as e:
|
23
|
+
return f"Failed to sleep monitors: {type(e).__name__}: {e}"
|
24
|
+
|
25
|
+
@mcp.tool("wake_monitors")
|
26
|
+
async def wake_monitors() -> str:
|
27
|
+
"""Wake up sleeping monitors."""
|
28
|
+
try:
|
29
|
+
# This is dumb, but moving the mouse 1px wakes monitors
|
30
|
+
x, y = win32gui.GetCursorPos()
|
31
|
+
ctypes.windll.user32.SetCursorPos(x, y + 1)
|
32
|
+
ctypes.windll.user32.SetCursorPos(x, y)
|
33
|
+
return "Monitors woken up"
|
34
|
+
except Exception as e:
|
35
|
+
return f"Failed to wake monitors: {type(e).__name__}: {e}"
|
@@ -0,0 +1,38 @@
|
|
1
|
+
import asyncio
|
2
|
+
from fastmcp import FastMCP
|
3
|
+
|
4
|
+
from mcp_windows.appid import APP_ID
|
5
|
+
|
6
|
+
from winrt.windows.ui.notifications import ToastNotificationManager, ToastNotification
|
7
|
+
from winrt.windows.data.xml.dom import XmlDocument
|
8
|
+
|
9
|
+
mcp: FastMCP = FastMCP(
|
10
|
+
name="notifications",
|
11
|
+
)
|
12
|
+
|
13
|
+
@mcp.tool("send_toast")
|
14
|
+
async def send_toast(title: str, message: str) -> str:
|
15
|
+
"""Send a windows toast notification to the user."""
|
16
|
+
|
17
|
+
|
18
|
+
toast_xml_string = f"""
|
19
|
+
<toast>
|
20
|
+
<visual>
|
21
|
+
<binding template="ToastGeneric">
|
22
|
+
<text>{title}</text>
|
23
|
+
<text>{message}</text>
|
24
|
+
</binding>
|
25
|
+
</visual>
|
26
|
+
</toast>
|
27
|
+
"""
|
28
|
+
|
29
|
+
xml_doc = XmlDocument()
|
30
|
+
xml_doc.load_xml(toast_xml_string)
|
31
|
+
|
32
|
+
toast = ToastNotification(xml_doc)
|
33
|
+
|
34
|
+
notifier = ToastNotificationManager.create_toast_notifier_with_id(APP_ID)
|
35
|
+
|
36
|
+
notifier.show(toast)
|
37
|
+
|
38
|
+
return "Toast notification sent"
|
@@ -0,0 +1,140 @@
|
|
1
|
+
import asyncio
|
2
|
+
import json
|
3
|
+
import win32gui
|
4
|
+
import win32con
|
5
|
+
import win32process
|
6
|
+
import win32api
|
7
|
+
import psutil
|
8
|
+
|
9
|
+
from fastmcp import FastMCP
|
10
|
+
|
11
|
+
mcp: FastMCP = FastMCP(
|
12
|
+
name="window_management"
|
13
|
+
)
|
14
|
+
|
15
|
+
def get_process_info(pid: int) -> dict:
|
16
|
+
try:
|
17
|
+
proc = psutil.Process(pid)
|
18
|
+
return {
|
19
|
+
"pid": pid,
|
20
|
+
"exe": proc.name(),
|
21
|
+
}
|
22
|
+
except psutil.NoSuchProcess:
|
23
|
+
return {
|
24
|
+
"pid": pid,
|
25
|
+
"exe": "<terminated>"
|
26
|
+
}
|
27
|
+
|
28
|
+
@mcp.tool("get_foreground_window_info")
|
29
|
+
async def get_foreground_window_info() -> str:
|
30
|
+
"""Return information about the currently focused (foreground) window."""
|
31
|
+
hwnd = win32gui.GetForegroundWindow()
|
32
|
+
if hwnd == 0:
|
33
|
+
return json.dumps({"error": "No active window"})
|
34
|
+
|
35
|
+
_, pid = win32process.GetWindowThreadProcessId(hwnd)
|
36
|
+
info = get_process_info(pid)
|
37
|
+
info.update({
|
38
|
+
"hwnd": hwnd,
|
39
|
+
"title": win32gui.GetWindowText(hwnd),
|
40
|
+
"class": win32gui.GetClassName(hwnd),
|
41
|
+
})
|
42
|
+
return json.dumps(info, ensure_ascii=False)
|
43
|
+
|
44
|
+
@mcp.tool("get_window_list")
|
45
|
+
async def list_open_windows() -> str:
|
46
|
+
"""Return a list of all top-level visible windows."""
|
47
|
+
windows = []
|
48
|
+
|
49
|
+
def callback(hwnd, _):
|
50
|
+
if win32gui.IsWindowVisible(hwnd) and win32gui.GetWindowText(hwnd):
|
51
|
+
_, pid = win32process.GetWindowThreadProcessId(hwnd)
|
52
|
+
info = get_process_info(pid)
|
53
|
+
info.update({
|
54
|
+
"hwnd": hwnd,
|
55
|
+
"title": win32gui.GetWindowText(hwnd),
|
56
|
+
"class": win32gui.GetClassName(hwnd),
|
57
|
+
})
|
58
|
+
windows.append(info)
|
59
|
+
|
60
|
+
win32gui.EnumWindows(callback, None)
|
61
|
+
return json.dumps(windows, ensure_ascii=False)
|
62
|
+
|
63
|
+
@mcp.tool("focus_window")
|
64
|
+
async def focus_window(hwnd: int) -> str:
|
65
|
+
"""Force focus a window using all known safe tricks (thread attach, fake input, fallback restore)."""
|
66
|
+
try:
|
67
|
+
hwnd = int(hwnd)
|
68
|
+
|
69
|
+
if not win32gui.IsWindow(hwnd):
|
70
|
+
return "Invalid HWND"
|
71
|
+
|
72
|
+
# Step 1: Only restore if minimized (prevent resizing)
|
73
|
+
if win32gui.IsIconic(hwnd):
|
74
|
+
win32gui.ShowWindow(hwnd, win32con.SW_RESTORE)
|
75
|
+
|
76
|
+
# Step 2: Try normal focus via thread attach
|
77
|
+
fg_hwnd = win32gui.GetForegroundWindow()
|
78
|
+
fg_thread = win32process.GetWindowThreadProcessId(fg_hwnd)[0]
|
79
|
+
current_thread = win32api.GetCurrentThreadId()
|
80
|
+
|
81
|
+
if fg_thread != current_thread:
|
82
|
+
win32process.AttachThreadInput(fg_thread, current_thread, True)
|
83
|
+
|
84
|
+
try:
|
85
|
+
win32gui.SetForegroundWindow(hwnd)
|
86
|
+
except Exception:
|
87
|
+
pass
|
88
|
+
|
89
|
+
if fg_thread != current_thread:
|
90
|
+
win32process.AttachThreadInput(fg_thread, current_thread, False)
|
91
|
+
|
92
|
+
# Step 3: Check if it worked
|
93
|
+
if win32gui.GetForegroundWindow() == hwnd:
|
94
|
+
return "Focused window successfully"
|
95
|
+
|
96
|
+
# Step 4: Fallback — simulate user input (to defeat foreground lock)
|
97
|
+
win32api.keybd_event(0, 0, 0, 0)
|
98
|
+
await asyncio.sleep(0.05)
|
99
|
+
|
100
|
+
# Step 5: Try again
|
101
|
+
try:
|
102
|
+
win32gui.SetForegroundWindow(hwnd)
|
103
|
+
except Exception:
|
104
|
+
pass
|
105
|
+
|
106
|
+
if win32gui.GetForegroundWindow() == hwnd:
|
107
|
+
return "Focused window (after simulating input)"
|
108
|
+
|
109
|
+
# Step 6: Hard fallback — minimize + restore
|
110
|
+
win32gui.ShowWindow(hwnd, win32con.SW_MINIMIZE)
|
111
|
+
await asyncio.sleep(0.2)
|
112
|
+
win32gui.ShowWindow(hwnd, win32con.SW_RESTORE)
|
113
|
+
win32gui.SetForegroundWindow(hwnd)
|
114
|
+
|
115
|
+
if win32gui.GetForegroundWindow() == hwnd:
|
116
|
+
return "Focused window (after minimize/restore trick)"
|
117
|
+
|
118
|
+
return "Could not focus window: OS restrictions"
|
119
|
+
|
120
|
+
except Exception as e:
|
121
|
+
return f"Could not focus window: {type(e).__name__}: {e}"
|
122
|
+
|
123
|
+
|
124
|
+
@mcp.tool("close_window")
|
125
|
+
async def close_window(hwnd: int) -> str:
|
126
|
+
"""Close the specified window."""
|
127
|
+
try:
|
128
|
+
win32gui.PostMessage(hwnd, win32con.WM_CLOSE, 0, 0)
|
129
|
+
return "Closed window"
|
130
|
+
except Exception as e:
|
131
|
+
return f"Could not close window: {type(e).__name__}: {e}"
|
132
|
+
|
133
|
+
@mcp.tool("minimize_window")
|
134
|
+
async def minimize_window(hwnd: int) -> str:
|
135
|
+
"""Minimize the specified window."""
|
136
|
+
try:
|
137
|
+
win32gui.ShowWindow(hwnd, win32con.SW_MINIMIZE)
|
138
|
+
return "Minimized window"
|
139
|
+
except Exception as e:
|
140
|
+
return f"Could not minimize window: {type(e).__name__}: {e}"
|
@@ -0,0 +1,540 @@
|
|
1
|
+
version = 1
|
2
|
+
requires-python = ">=3.13"
|
3
|
+
|
4
|
+
[[package]]
|
5
|
+
name = "annotated-types"
|
6
|
+
version = "0.7.0"
|
7
|
+
source = { registry = "https://pypi.org/simple" }
|
8
|
+
sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081 }
|
9
|
+
wheels = [
|
10
|
+
{ url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643 },
|
11
|
+
]
|
12
|
+
|
13
|
+
[[package]]
|
14
|
+
name = "anyio"
|
15
|
+
version = "4.9.0"
|
16
|
+
source = { registry = "https://pypi.org/simple" }
|
17
|
+
dependencies = [
|
18
|
+
{ name = "idna" },
|
19
|
+
{ name = "sniffio" },
|
20
|
+
]
|
21
|
+
sdist = { url = "https://files.pythonhosted.org/packages/95/7d/4c1bd541d4dffa1b52bd83fb8527089e097a106fc90b467a7313b105f840/anyio-4.9.0.tar.gz", hash = "sha256:673c0c244e15788651a4ff38710fea9675823028a6f08a5eda409e0c9840a028", size = 190949 }
|
22
|
+
wheels = [
|
23
|
+
{ url = "https://files.pythonhosted.org/packages/a1/ee/48ca1a7c89ffec8b6a0c5d02b89c305671d5ffd8d3c94acf8b8c408575bb/anyio-4.9.0-py3-none-any.whl", hash = "sha256:9f76d541cad6e36af7beb62e978876f3b41e3e04f2c1fbf0884604c0a9c4d93c", size = 100916 },
|
24
|
+
]
|
25
|
+
|
26
|
+
[[package]]
|
27
|
+
name = "certifi"
|
28
|
+
version = "2025.1.31"
|
29
|
+
source = { registry = "https://pypi.org/simple" }
|
30
|
+
sdist = { url = "https://files.pythonhosted.org/packages/1c/ab/c9f1e32b7b1bf505bf26f0ef697775960db7932abeb7b516de930ba2705f/certifi-2025.1.31.tar.gz", hash = "sha256:3d5da6925056f6f18f119200434a4780a94263f10d1c21d032a6f6b2baa20651", size = 167577 }
|
31
|
+
wheels = [
|
32
|
+
{ url = "https://files.pythonhosted.org/packages/38/fc/bce832fd4fd99766c04d1ee0eead6b0ec6486fb100ae5e74c1d91292b982/certifi-2025.1.31-py3-none-any.whl", hash = "sha256:ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe", size = 166393 },
|
33
|
+
]
|
34
|
+
|
35
|
+
[[package]]
|
36
|
+
name = "click"
|
37
|
+
version = "8.1.8"
|
38
|
+
source = { registry = "https://pypi.org/simple" }
|
39
|
+
dependencies = [
|
40
|
+
{ name = "colorama", marker = "sys_platform == 'win32'" },
|
41
|
+
]
|
42
|
+
sdist = { url = "https://files.pythonhosted.org/packages/b9/2e/0090cbf739cee7d23781ad4b89a9894a41538e4fcf4c31dcdd705b78eb8b/click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a", size = 226593 }
|
43
|
+
wheels = [
|
44
|
+
{ url = "https://files.pythonhosted.org/packages/7e/d4/7ebdbd03970677812aac39c869717059dbb71a4cfc033ca6e5221787892c/click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2", size = 98188 },
|
45
|
+
]
|
46
|
+
|
47
|
+
[[package]]
|
48
|
+
name = "colorama"
|
49
|
+
version = "0.4.6"
|
50
|
+
source = { registry = "https://pypi.org/simple" }
|
51
|
+
sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697 }
|
52
|
+
wheels = [
|
53
|
+
{ url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335 },
|
54
|
+
]
|
55
|
+
|
56
|
+
[[package]]
|
57
|
+
name = "dotenv"
|
58
|
+
version = "0.9.9"
|
59
|
+
source = { registry = "https://pypi.org/simple" }
|
60
|
+
dependencies = [
|
61
|
+
{ name = "python-dotenv" },
|
62
|
+
]
|
63
|
+
wheels = [
|
64
|
+
{ url = "https://files.pythonhosted.org/packages/b2/b7/545d2c10c1fc15e48653c91efde329a790f2eecfbbf2bd16003b5db2bab0/dotenv-0.9.9-py2.py3-none-any.whl", hash = "sha256:29cf74a087b31dafdb5a446b6d7e11cbce8ed2741540e2339c69fbef92c94ce9", size = 1892 },
|
65
|
+
]
|
66
|
+
|
67
|
+
[[package]]
|
68
|
+
name = "exceptiongroup"
|
69
|
+
version = "1.2.2"
|
70
|
+
source = { registry = "https://pypi.org/simple" }
|
71
|
+
sdist = { url = "https://files.pythonhosted.org/packages/09/35/2495c4ac46b980e4ca1f6ad6db102322ef3ad2410b79fdde159a4b0f3b92/exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc", size = 28883 }
|
72
|
+
wheels = [
|
73
|
+
{ url = "https://files.pythonhosted.org/packages/02/cc/b7e31358aac6ed1ef2bb790a9746ac2c69bcb3c8588b41616914eb106eaf/exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b", size = 16453 },
|
74
|
+
]
|
75
|
+
|
76
|
+
[[package]]
|
77
|
+
name = "fastmcp"
|
78
|
+
version = "2.2.0"
|
79
|
+
source = { registry = "https://pypi.org/simple" }
|
80
|
+
dependencies = [
|
81
|
+
{ name = "dotenv" },
|
82
|
+
{ name = "exceptiongroup" },
|
83
|
+
{ name = "httpx" },
|
84
|
+
{ name = "mcp" },
|
85
|
+
{ name = "openapi-pydantic" },
|
86
|
+
{ name = "rich" },
|
87
|
+
{ name = "typer" },
|
88
|
+
{ name = "websockets" },
|
89
|
+
]
|
90
|
+
sdist = { url = "https://files.pythonhosted.org/packages/e8/5f/0ad05fb3cca4529a994a7446da554c0ecf2a91bcf3a076261e29b5043ff1/fastmcp-2.2.0.tar.gz", hash = "sha256:4d9373705ebd9e3de807005ed732b8955c6eb74e4b47595752f461c1c689f231", size = 918342 }
|
91
|
+
wheels = [
|
92
|
+
{ url = "https://files.pythonhosted.org/packages/69/1d/266a86204e658d9133382e7f260d4cabb75fb18ac2e03efc953e25ebe20f/fastmcp-2.2.0-py3-none-any.whl", hash = "sha256:077bdf3f37f423688f1356db0f6ed0864e001de712bce41ad4939fa8b38d7149", size = 75793 },
|
93
|
+
]
|
94
|
+
|
95
|
+
[[package]]
|
96
|
+
name = "h11"
|
97
|
+
version = "0.14.0"
|
98
|
+
source = { registry = "https://pypi.org/simple" }
|
99
|
+
sdist = { url = "https://files.pythonhosted.org/packages/f5/38/3af3d3633a34a3316095b39c8e8fb4853a28a536e55d347bd8d8e9a14b03/h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d", size = 100418 }
|
100
|
+
wheels = [
|
101
|
+
{ url = "https://files.pythonhosted.org/packages/95/04/ff642e65ad6b90db43e668d70ffb6736436c7ce41fcc549f4e9472234127/h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761", size = 58259 },
|
102
|
+
]
|
103
|
+
|
104
|
+
[[package]]
|
105
|
+
name = "httpcore"
|
106
|
+
version = "1.0.8"
|
107
|
+
source = { registry = "https://pypi.org/simple" }
|
108
|
+
dependencies = [
|
109
|
+
{ name = "certifi" },
|
110
|
+
{ name = "h11" },
|
111
|
+
]
|
112
|
+
sdist = { url = "https://files.pythonhosted.org/packages/9f/45/ad3e1b4d448f22c0cff4f5692f5ed0666658578e358b8d58a19846048059/httpcore-1.0.8.tar.gz", hash = "sha256:86e94505ed24ea06514883fd44d2bc02d90e77e7979c8eb71b90f41d364a1bad", size = 85385 }
|
113
|
+
wheels = [
|
114
|
+
{ url = "https://files.pythonhosted.org/packages/18/8d/f052b1e336bb2c1fc7ed1aaed898aa570c0b61a09707b108979d9fc6e308/httpcore-1.0.8-py3-none-any.whl", hash = "sha256:5254cf149bcb5f75e9d1b2b9f729ea4a4b883d1ad7379fc632b727cec23674be", size = 78732 },
|
115
|
+
]
|
116
|
+
|
117
|
+
[[package]]
|
118
|
+
name = "httpx"
|
119
|
+
version = "0.28.1"
|
120
|
+
source = { registry = "https://pypi.org/simple" }
|
121
|
+
dependencies = [
|
122
|
+
{ name = "anyio" },
|
123
|
+
{ name = "certifi" },
|
124
|
+
{ name = "httpcore" },
|
125
|
+
{ name = "idna" },
|
126
|
+
]
|
127
|
+
sdist = { url = "https://files.pythonhosted.org/packages/b1/df/48c586a5fe32a0f01324ee087459e112ebb7224f646c0b5023f5e79e9956/httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc", size = 141406 }
|
128
|
+
wheels = [
|
129
|
+
{ url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 73517 },
|
130
|
+
]
|
131
|
+
|
132
|
+
[[package]]
|
133
|
+
name = "httpx-sse"
|
134
|
+
version = "0.4.0"
|
135
|
+
source = { registry = "https://pypi.org/simple" }
|
136
|
+
sdist = { url = "https://files.pythonhosted.org/packages/4c/60/8f4281fa9bbf3c8034fd54c0e7412e66edbab6bc74c4996bd616f8d0406e/httpx-sse-0.4.0.tar.gz", hash = "sha256:1e81a3a3070ce322add1d3529ed42eb5f70817f45ed6ec915ab753f961139721", size = 12624 }
|
137
|
+
wheels = [
|
138
|
+
{ url = "https://files.pythonhosted.org/packages/e1/9b/a181f281f65d776426002f330c31849b86b31fc9d848db62e16f03ff739f/httpx_sse-0.4.0-py3-none-any.whl", hash = "sha256:f329af6eae57eaa2bdfd962b42524764af68075ea87370a2de920af5341e318f", size = 7819 },
|
139
|
+
]
|
140
|
+
|
141
|
+
[[package]]
|
142
|
+
name = "idna"
|
143
|
+
version = "3.10"
|
144
|
+
source = { registry = "https://pypi.org/simple" }
|
145
|
+
sdist = { url = "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", size = 190490 }
|
146
|
+
wheels = [
|
147
|
+
{ url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442 },
|
148
|
+
]
|
149
|
+
|
150
|
+
[[package]]
|
151
|
+
name = "markdown-it-py"
|
152
|
+
version = "3.0.0"
|
153
|
+
source = { registry = "https://pypi.org/simple" }
|
154
|
+
dependencies = [
|
155
|
+
{ name = "mdurl" },
|
156
|
+
]
|
157
|
+
sdist = { url = "https://files.pythonhosted.org/packages/38/71/3b932df36c1a044d397a1f92d1cf91ee0a503d91e470cbd670aa66b07ed0/markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb", size = 74596 }
|
158
|
+
wheels = [
|
159
|
+
{ url = "https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1", size = 87528 },
|
160
|
+
]
|
161
|
+
|
162
|
+
[[package]]
|
163
|
+
name = "mcp"
|
164
|
+
version = "1.6.0"
|
165
|
+
source = { registry = "https://pypi.org/simple" }
|
166
|
+
dependencies = [
|
167
|
+
{ name = "anyio" },
|
168
|
+
{ name = "httpx" },
|
169
|
+
{ name = "httpx-sse" },
|
170
|
+
{ name = "pydantic" },
|
171
|
+
{ name = "pydantic-settings" },
|
172
|
+
{ name = "sse-starlette" },
|
173
|
+
{ name = "starlette" },
|
174
|
+
{ name = "uvicorn" },
|
175
|
+
]
|
176
|
+
sdist = { url = "https://files.pythonhosted.org/packages/95/d2/f587cb965a56e992634bebc8611c5b579af912b74e04eb9164bd49527d21/mcp-1.6.0.tar.gz", hash = "sha256:d9324876de2c5637369f43161cd71eebfd803df5a95e46225cab8d280e366723", size = 200031 }
|
177
|
+
wheels = [
|
178
|
+
{ url = "https://files.pythonhosted.org/packages/10/30/20a7f33b0b884a9d14dd3aa94ff1ac9da1479fe2ad66dd9e2736075d2506/mcp-1.6.0-py3-none-any.whl", hash = "sha256:7bd24c6ea042dbec44c754f100984d186620d8b841ec30f1b19eda9b93a634d0", size = 76077 },
|
179
|
+
]
|
180
|
+
|
181
|
+
[[package]]
|
182
|
+
name = "mcp-windows"
|
183
|
+
version = "0.0.1"
|
184
|
+
source = { editable = "." }
|
185
|
+
dependencies = [
|
186
|
+
{ name = "fastmcp" },
|
187
|
+
{ name = "mcp" },
|
188
|
+
{ name = "psutil" },
|
189
|
+
{ name = "pywin32" },
|
190
|
+
{ name = "winrt-runtime" },
|
191
|
+
{ name = "winrt-windows-data-xml-dom" },
|
192
|
+
{ name = "winrt-windows-foundation" },
|
193
|
+
{ name = "winrt-windows-foundation-collections" },
|
194
|
+
{ name = "winrt-windows-media-control" },
|
195
|
+
{ name = "winrt-windows-ui-notifications" },
|
196
|
+
]
|
197
|
+
|
198
|
+
[package.metadata]
|
199
|
+
requires-dist = [
|
200
|
+
{ name = "fastmcp", specifier = ">=2.2.0" },
|
201
|
+
{ name = "mcp", specifier = ">=1.6.0" },
|
202
|
+
{ name = "psutil", specifier = ">=7.0.0" },
|
203
|
+
{ name = "pywin32", specifier = ">=310" },
|
204
|
+
{ name = "winrt-runtime", specifier = ">=3.1.0" },
|
205
|
+
{ name = "winrt-windows-data-xml-dom", specifier = ">=3.1.0" },
|
206
|
+
{ name = "winrt-windows-foundation", specifier = ">=3.1.0" },
|
207
|
+
{ name = "winrt-windows-foundation-collections", specifier = ">=3.1.0" },
|
208
|
+
{ name = "winrt-windows-media-control", specifier = ">=3.1.0" },
|
209
|
+
{ name = "winrt-windows-ui-notifications", specifier = ">=3.1.0" },
|
210
|
+
]
|
211
|
+
|
212
|
+
[[package]]
|
213
|
+
name = "mdurl"
|
214
|
+
version = "0.1.2"
|
215
|
+
source = { registry = "https://pypi.org/simple" }
|
216
|
+
sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729 }
|
217
|
+
wheels = [
|
218
|
+
{ url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979 },
|
219
|
+
]
|
220
|
+
|
221
|
+
[[package]]
|
222
|
+
name = "openapi-pydantic"
|
223
|
+
version = "0.5.1"
|
224
|
+
source = { registry = "https://pypi.org/simple" }
|
225
|
+
dependencies = [
|
226
|
+
{ name = "pydantic" },
|
227
|
+
]
|
228
|
+
sdist = { url = "https://files.pythonhosted.org/packages/02/2e/58d83848dd1a79cb92ed8e63f6ba901ca282c5f09d04af9423ec26c56fd7/openapi_pydantic-0.5.1.tar.gz", hash = "sha256:ff6835af6bde7a459fb93eb93bb92b8749b754fc6e51b2f1590a19dc3005ee0d", size = 60892 }
|
229
|
+
wheels = [
|
230
|
+
{ url = "https://files.pythonhosted.org/packages/12/cf/03675d8bd8ecbf4445504d8071adab19f5f993676795708e36402ab38263/openapi_pydantic-0.5.1-py3-none-any.whl", hash = "sha256:a3a09ef4586f5bd760a8df7f43028b60cafb6d9f61de2acba9574766255ab146", size = 96381 },
|
231
|
+
]
|
232
|
+
|
233
|
+
[[package]]
|
234
|
+
name = "psutil"
|
235
|
+
version = "7.0.0"
|
236
|
+
source = { registry = "https://pypi.org/simple" }
|
237
|
+
sdist = { url = "https://files.pythonhosted.org/packages/2a/80/336820c1ad9286a4ded7e845b2eccfcb27851ab8ac6abece774a6ff4d3de/psutil-7.0.0.tar.gz", hash = "sha256:7be9c3eba38beccb6495ea33afd982a44074b78f28c434a1f51cc07fd315c456", size = 497003 }
|
238
|
+
wheels = [
|
239
|
+
{ url = "https://files.pythonhosted.org/packages/ed/e6/2d26234410f8b8abdbf891c9da62bee396583f713fb9f3325a4760875d22/psutil-7.0.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:101d71dc322e3cffd7cea0650b09b3d08b8e7c4109dd6809fe452dfd00e58b25", size = 238051 },
|
240
|
+
{ url = "https://files.pythonhosted.org/packages/04/8b/30f930733afe425e3cbfc0e1468a30a18942350c1a8816acfade80c005c4/psutil-7.0.0-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:39db632f6bb862eeccf56660871433e111b6ea58f2caea825571951d4b6aa3da", size = 239535 },
|
241
|
+
{ url = "https://files.pythonhosted.org/packages/2a/ed/d362e84620dd22876b55389248e522338ed1bf134a5edd3b8231d7207f6d/psutil-7.0.0-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1fcee592b4c6f146991ca55919ea3d1f8926497a713ed7faaf8225e174581e91", size = 275004 },
|
242
|
+
{ url = "https://files.pythonhosted.org/packages/bf/b9/b0eb3f3cbcb734d930fdf839431606844a825b23eaf9a6ab371edac8162c/psutil-7.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b1388a4f6875d7e2aff5c4ca1cc16c545ed41dd8bb596cefea80111db353a34", size = 277986 },
|
243
|
+
{ url = "https://files.pythonhosted.org/packages/eb/a2/709e0fe2f093556c17fbafda93ac032257242cabcc7ff3369e2cb76a97aa/psutil-7.0.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5f098451abc2828f7dc6b58d44b532b22f2088f4999a937557b603ce72b1993", size = 279544 },
|
244
|
+
{ url = "https://files.pythonhosted.org/packages/50/e6/eecf58810b9d12e6427369784efe814a1eec0f492084ce8eb8f4d89d6d61/psutil-7.0.0-cp37-abi3-win32.whl", hash = "sha256:ba3fcef7523064a6c9da440fc4d6bd07da93ac726b5733c29027d7dc95b39d99", size = 241053 },
|
245
|
+
{ url = "https://files.pythonhosted.org/packages/50/1b/6921afe68c74868b4c9fa424dad3be35b095e16687989ebbb50ce4fceb7c/psutil-7.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:4cf3d4eb1aa9b348dec30105c55cd9b7d4629285735a102beb4441e38db90553", size = 244885 },
|
246
|
+
]
|
247
|
+
|
248
|
+
[[package]]
|
249
|
+
name = "pydantic"
|
250
|
+
version = "2.11.3"
|
251
|
+
source = { registry = "https://pypi.org/simple" }
|
252
|
+
dependencies = [
|
253
|
+
{ name = "annotated-types" },
|
254
|
+
{ name = "pydantic-core" },
|
255
|
+
{ name = "typing-extensions" },
|
256
|
+
{ name = "typing-inspection" },
|
257
|
+
]
|
258
|
+
sdist = { url = "https://files.pythonhosted.org/packages/10/2e/ca897f093ee6c5f3b0bee123ee4465c50e75431c3d5b6a3b44a47134e891/pydantic-2.11.3.tar.gz", hash = "sha256:7471657138c16adad9322fe3070c0116dd6c3ad8d649300e3cbdfe91f4db4ec3", size = 785513 }
|
259
|
+
wheels = [
|
260
|
+
{ url = "https://files.pythonhosted.org/packages/b0/1d/407b29780a289868ed696d1616f4aad49d6388e5a77f567dcd2629dcd7b8/pydantic-2.11.3-py3-none-any.whl", hash = "sha256:a082753436a07f9ba1289c6ffa01cd93db3548776088aa917cc43b63f68fa60f", size = 443591 },
|
261
|
+
]
|
262
|
+
|
263
|
+
[[package]]
|
264
|
+
name = "pydantic-core"
|
265
|
+
version = "2.33.1"
|
266
|
+
source = { registry = "https://pypi.org/simple" }
|
267
|
+
dependencies = [
|
268
|
+
{ name = "typing-extensions" },
|
269
|
+
]
|
270
|
+
sdist = { url = "https://files.pythonhosted.org/packages/17/19/ed6a078a5287aea7922de6841ef4c06157931622c89c2a47940837b5eecd/pydantic_core-2.33.1.tar.gz", hash = "sha256:bcc9c6fdb0ced789245b02b7d6603e17d1563064ddcfc36f046b61c0c05dd9df", size = 434395 }
|
271
|
+
wheels = [
|
272
|
+
{ url = "https://files.pythonhosted.org/packages/7a/24/eed3466a4308d79155f1cdd5c7432c80ddcc4530ba8623b79d5ced021641/pydantic_core-2.33.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:70af6a21237b53d1fe7b9325b20e65cbf2f0a848cf77bed492b029139701e66a", size = 2033551 },
|
273
|
+
{ url = "https://files.pythonhosted.org/packages/ab/14/df54b1a0bc9b6ded9b758b73139d2c11b4e8eb43e8ab9c5847c0a2913ada/pydantic_core-2.33.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:282b3fe1bbbe5ae35224a0dbd05aed9ccabccd241e8e6b60370484234b456266", size = 1852785 },
|
274
|
+
{ url = "https://files.pythonhosted.org/packages/fa/96/e275f15ff3d34bb04b0125d9bc8848bf69f25d784d92a63676112451bfb9/pydantic_core-2.33.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4b315e596282bbb5822d0c7ee9d255595bd7506d1cb20c2911a4da0b970187d3", size = 1897758 },
|
275
|
+
{ url = "https://files.pythonhosted.org/packages/b7/d8/96bc536e975b69e3a924b507d2a19aedbf50b24e08c80fb00e35f9baaed8/pydantic_core-2.33.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1dfae24cf9921875ca0ca6a8ecb4bb2f13c855794ed0d468d6abbec6e6dcd44a", size = 1986109 },
|
276
|
+
{ url = "https://files.pythonhosted.org/packages/90/72/ab58e43ce7e900b88cb571ed057b2fcd0e95b708a2e0bed475b10130393e/pydantic_core-2.33.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6dd8ecfde08d8bfadaea669e83c63939af76f4cf5538a72597016edfa3fad516", size = 2129159 },
|
277
|
+
{ url = "https://files.pythonhosted.org/packages/dc/3f/52d85781406886c6870ac995ec0ba7ccc028b530b0798c9080531b409fdb/pydantic_core-2.33.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2f593494876eae852dc98c43c6f260f45abdbfeec9e4324e31a481d948214764", size = 2680222 },
|
278
|
+
{ url = "https://files.pythonhosted.org/packages/f4/56/6e2ef42f363a0eec0fd92f74a91e0ac48cd2e49b695aac1509ad81eee86a/pydantic_core-2.33.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:948b73114f47fd7016088e5186d13faf5e1b2fe83f5e320e371f035557fd264d", size = 2006980 },
|
279
|
+
{ url = "https://files.pythonhosted.org/packages/4c/c0/604536c4379cc78359f9ee0aa319f4aedf6b652ec2854953f5a14fc38c5a/pydantic_core-2.33.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e11f3864eb516af21b01e25fac915a82e9ddad3bb0fb9e95a246067398b435a4", size = 2120840 },
|
280
|
+
{ url = "https://files.pythonhosted.org/packages/1f/46/9eb764814f508f0edfb291a0f75d10854d78113fa13900ce13729aaec3ae/pydantic_core-2.33.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:549150be302428b56fdad0c23c2741dcdb5572413776826c965619a25d9c6bde", size = 2072518 },
|
281
|
+
{ url = "https://files.pythonhosted.org/packages/42/e3/fb6b2a732b82d1666fa6bf53e3627867ea3131c5f39f98ce92141e3e3dc1/pydantic_core-2.33.1-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:495bc156026efafd9ef2d82372bd38afce78ddd82bf28ef5276c469e57c0c83e", size = 2248025 },
|
282
|
+
{ url = "https://files.pythonhosted.org/packages/5c/9d/fbe8fe9d1aa4dac88723f10a921bc7418bd3378a567cb5e21193a3c48b43/pydantic_core-2.33.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ec79de2a8680b1a67a07490bddf9636d5c2fab609ba8c57597e855fa5fa4dacd", size = 2254991 },
|
283
|
+
{ url = "https://files.pythonhosted.org/packages/aa/99/07e2237b8a66438d9b26482332cda99a9acccb58d284af7bc7c946a42fd3/pydantic_core-2.33.1-cp313-cp313-win32.whl", hash = "sha256:ee12a7be1742f81b8a65b36c6921022301d466b82d80315d215c4c691724986f", size = 1915262 },
|
284
|
+
{ url = "https://files.pythonhosted.org/packages/8a/f4/e457a7849beeed1e5defbcf5051c6f7b3c91a0624dd31543a64fc9adcf52/pydantic_core-2.33.1-cp313-cp313-win_amd64.whl", hash = "sha256:ede9b407e39949d2afc46385ce6bd6e11588660c26f80576c11c958e6647bc40", size = 1956626 },
|
285
|
+
{ url = "https://files.pythonhosted.org/packages/20/d0/e8d567a7cff7b04e017ae164d98011f1e1894269fe8e90ea187a3cbfb562/pydantic_core-2.33.1-cp313-cp313-win_arm64.whl", hash = "sha256:aa687a23d4b7871a00e03ca96a09cad0f28f443690d300500603bd0adba4b523", size = 1909590 },
|
286
|
+
{ url = "https://files.pythonhosted.org/packages/ef/fd/24ea4302d7a527d672c5be06e17df16aabfb4e9fdc6e0b345c21580f3d2a/pydantic_core-2.33.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:401d7b76e1000d0dd5538e6381d28febdcacb097c8d340dde7d7fc6e13e9f95d", size = 1812963 },
|
287
|
+
{ url = "https://files.pythonhosted.org/packages/5f/95/4fbc2ecdeb5c1c53f1175a32d870250194eb2fdf6291b795ab08c8646d5d/pydantic_core-2.33.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7aeb055a42d734c0255c9e489ac67e75397d59c6fbe60d155851e9782f276a9c", size = 1986896 },
|
288
|
+
{ url = "https://files.pythonhosted.org/packages/71/ae/fe31e7f4a62431222d8f65a3bd02e3fa7e6026d154a00818e6d30520ea77/pydantic_core-2.33.1-cp313-cp313t-win_amd64.whl", hash = "sha256:338ea9b73e6e109f15ab439e62cb3b78aa752c7fd9536794112e14bee02c8d18", size = 1931810 },
|
289
|
+
]
|
290
|
+
|
291
|
+
[[package]]
|
292
|
+
name = "pydantic-settings"
|
293
|
+
version = "2.9.0"
|
294
|
+
source = { registry = "https://pypi.org/simple" }
|
295
|
+
dependencies = [
|
296
|
+
{ name = "pydantic" },
|
297
|
+
{ name = "python-dotenv" },
|
298
|
+
{ name = "typing-inspection" },
|
299
|
+
]
|
300
|
+
sdist = { url = "https://files.pythonhosted.org/packages/04/e3/ed51b456c7f2a299af624dd6096e7c96d6f65de06ee2f7fb5884072a2c86/pydantic_settings-2.9.0.tar.gz", hash = "sha256:24fd3fe19bc2c0eddeff91860dc5e303572b39fb70b1391c64955dd4d1875098", size = 163231 }
|
301
|
+
wheels = [
|
302
|
+
{ url = "https://files.pythonhosted.org/packages/08/88/07f8aee46a05e6490c211ded648a2440eec6e96b9a40186de424ed253c31/pydantic_settings-2.9.0-py3-none-any.whl", hash = "sha256:4937fe39355b1f1f1e429e6695d68ce42501340d642c000447e48b1d9d418dfd", size = 44348 },
|
303
|
+
]
|
304
|
+
|
305
|
+
[[package]]
|
306
|
+
name = "pygments"
|
307
|
+
version = "2.19.1"
|
308
|
+
source = { registry = "https://pypi.org/simple" }
|
309
|
+
sdist = { url = "https://files.pythonhosted.org/packages/7c/2d/c3338d48ea6cc0feb8446d8e6937e1408088a72a39937982cc6111d17f84/pygments-2.19.1.tar.gz", hash = "sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f", size = 4968581 }
|
310
|
+
wheels = [
|
311
|
+
{ url = "https://files.pythonhosted.org/packages/8a/0b/9fcc47d19c48b59121088dd6da2488a49d5f72dacf8262e2790a1d2c7d15/pygments-2.19.1-py3-none-any.whl", hash = "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c", size = 1225293 },
|
312
|
+
]
|
313
|
+
|
314
|
+
[[package]]
|
315
|
+
name = "python-dotenv"
|
316
|
+
version = "1.1.0"
|
317
|
+
source = { registry = "https://pypi.org/simple" }
|
318
|
+
sdist = { url = "https://files.pythonhosted.org/packages/88/2c/7bb1416c5620485aa793f2de31d3df393d3686aa8a8506d11e10e13c5baf/python_dotenv-1.1.0.tar.gz", hash = "sha256:41f90bc6f5f177fb41f53e87666db362025010eb28f60a01c9143bfa33a2b2d5", size = 39920 }
|
319
|
+
wheels = [
|
320
|
+
{ url = "https://files.pythonhosted.org/packages/1e/18/98a99ad95133c6a6e2005fe89faedf294a748bd5dc803008059409ac9b1e/python_dotenv-1.1.0-py3-none-any.whl", hash = "sha256:d7c01d9e2293916c18baf562d95698754b0dbbb5e74d457c45d4f6561fb9d55d", size = 20256 },
|
321
|
+
]
|
322
|
+
|
323
|
+
[[package]]
|
324
|
+
name = "pywin32"
|
325
|
+
version = "310"
|
326
|
+
source = { registry = "https://pypi.org/simple" }
|
327
|
+
wheels = [
|
328
|
+
{ url = "https://files.pythonhosted.org/packages/1c/09/9c1b978ffc4ae53999e89c19c77ba882d9fce476729f23ef55211ea1c034/pywin32-310-cp313-cp313-win32.whl", hash = "sha256:5d241a659c496ada3253cd01cfaa779b048e90ce4b2b38cd44168ad555ce74ab", size = 8794384 },
|
329
|
+
{ url = "https://files.pythonhosted.org/packages/45/3c/b4640f740ffebadd5d34df35fecba0e1cfef8fde9f3e594df91c28ad9b50/pywin32-310-cp313-cp313-win_amd64.whl", hash = "sha256:667827eb3a90208ddbdcc9e860c81bde63a135710e21e4cb3348968e4bd5249e", size = 9503039 },
|
330
|
+
{ url = "https://files.pythonhosted.org/packages/b4/f4/f785020090fb050e7fb6d34b780f2231f302609dc964672f72bfaeb59a28/pywin32-310-cp313-cp313-win_arm64.whl", hash = "sha256:e308f831de771482b7cf692a1f308f8fca701b2d8f9dde6cc440c7da17e47b33", size = 8458152 },
|
331
|
+
]
|
332
|
+
|
333
|
+
[[package]]
|
334
|
+
name = "rich"
|
335
|
+
version = "14.0.0"
|
336
|
+
source = { registry = "https://pypi.org/simple" }
|
337
|
+
dependencies = [
|
338
|
+
{ name = "markdown-it-py" },
|
339
|
+
{ name = "pygments" },
|
340
|
+
]
|
341
|
+
sdist = { url = "https://files.pythonhosted.org/packages/a1/53/830aa4c3066a8ab0ae9a9955976fb770fe9c6102117c8ec4ab3ea62d89e8/rich-14.0.0.tar.gz", hash = "sha256:82f1bc23a6a21ebca4ae0c45af9bdbc492ed20231dcb63f297d6d1021a9d5725", size = 224078 }
|
342
|
+
wheels = [
|
343
|
+
{ url = "https://files.pythonhosted.org/packages/0d/9b/63f4c7ebc259242c89b3acafdb37b41d1185c07ff0011164674e9076b491/rich-14.0.0-py3-none-any.whl", hash = "sha256:1c9491e1951aac09caffd42f448ee3d04e58923ffe14993f6e83068dc395d7e0", size = 243229 },
|
344
|
+
]
|
345
|
+
|
346
|
+
[[package]]
|
347
|
+
name = "shellingham"
|
348
|
+
version = "1.5.4"
|
349
|
+
source = { registry = "https://pypi.org/simple" }
|
350
|
+
sdist = { url = "https://files.pythonhosted.org/packages/58/15/8b3609fd3830ef7b27b655beb4b4e9c62313a4e8da8c676e142cc210d58e/shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de", size = 10310 }
|
351
|
+
wheels = [
|
352
|
+
{ url = "https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686", size = 9755 },
|
353
|
+
]
|
354
|
+
|
355
|
+
[[package]]
|
356
|
+
name = "sniffio"
|
357
|
+
version = "1.3.1"
|
358
|
+
source = { registry = "https://pypi.org/simple" }
|
359
|
+
sdist = { url = "https://files.pythonhosted.org/packages/a2/87/a6771e1546d97e7e041b6ae58d80074f81b7d5121207425c964ddf5cfdbd/sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc", size = 20372 }
|
360
|
+
wheels = [
|
361
|
+
{ url = "https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2", size = 10235 },
|
362
|
+
]
|
363
|
+
|
364
|
+
[[package]]
|
365
|
+
name = "sse-starlette"
|
366
|
+
version = "2.2.1"
|
367
|
+
source = { registry = "https://pypi.org/simple" }
|
368
|
+
dependencies = [
|
369
|
+
{ name = "anyio" },
|
370
|
+
{ name = "starlette" },
|
371
|
+
]
|
372
|
+
sdist = { url = "https://files.pythonhosted.org/packages/71/a4/80d2a11af59fe75b48230846989e93979c892d3a20016b42bb44edb9e398/sse_starlette-2.2.1.tar.gz", hash = "sha256:54470d5f19274aeed6b2d473430b08b4b379ea851d953b11d7f1c4a2c118b419", size = 17376 }
|
373
|
+
wheels = [
|
374
|
+
{ url = "https://files.pythonhosted.org/packages/d9/e0/5b8bd393f27f4a62461c5cf2479c75a2cc2ffa330976f9f00f5f6e4f50eb/sse_starlette-2.2.1-py3-none-any.whl", hash = "sha256:6410a3d3ba0c89e7675d4c273a301d64649c03a5ef1ca101f10b47f895fd0e99", size = 10120 },
|
375
|
+
]
|
376
|
+
|
377
|
+
[[package]]
|
378
|
+
name = "starlette"
|
379
|
+
version = "0.46.2"
|
380
|
+
source = { registry = "https://pypi.org/simple" }
|
381
|
+
dependencies = [
|
382
|
+
{ name = "anyio" },
|
383
|
+
]
|
384
|
+
sdist = { url = "https://files.pythonhosted.org/packages/ce/20/08dfcd9c983f6a6f4a1000d934b9e6d626cff8d2eeb77a89a68eef20a2b7/starlette-0.46.2.tar.gz", hash = "sha256:7f7361f34eed179294600af672f565727419830b54b7b084efe44bb82d2fccd5", size = 2580846 }
|
385
|
+
wheels = [
|
386
|
+
{ url = "https://files.pythonhosted.org/packages/8b/0c/9d30a4ebeb6db2b25a841afbb80f6ef9a854fc3b41be131d249a977b4959/starlette-0.46.2-py3-none-any.whl", hash = "sha256:595633ce89f8ffa71a015caed34a5b2dc1c0cdb3f0f1fbd1e69339cf2abeec35", size = 72037 },
|
387
|
+
]
|
388
|
+
|
389
|
+
[[package]]
|
390
|
+
name = "typer"
|
391
|
+
version = "0.15.2"
|
392
|
+
source = { registry = "https://pypi.org/simple" }
|
393
|
+
dependencies = [
|
394
|
+
{ name = "click" },
|
395
|
+
{ name = "rich" },
|
396
|
+
{ name = "shellingham" },
|
397
|
+
{ name = "typing-extensions" },
|
398
|
+
]
|
399
|
+
sdist = { url = "https://files.pythonhosted.org/packages/8b/6f/3991f0f1c7fcb2df31aef28e0594d8d54b05393a0e4e34c65e475c2a5d41/typer-0.15.2.tar.gz", hash = "sha256:ab2fab47533a813c49fe1f16b1a370fd5819099c00b119e0633df65f22144ba5", size = 100711 }
|
400
|
+
wheels = [
|
401
|
+
{ url = "https://files.pythonhosted.org/packages/7f/fc/5b29fea8cee020515ca82cc68e3b8e1e34bb19a3535ad854cac9257b414c/typer-0.15.2-py3-none-any.whl", hash = "sha256:46a499c6107d645a9c13f7ee46c5d5096cae6f5fc57dd11eccbbb9ae3e44ddfc", size = 45061 },
|
402
|
+
]
|
403
|
+
|
404
|
+
[[package]]
|
405
|
+
name = "typing-extensions"
|
406
|
+
version = "4.13.2"
|
407
|
+
source = { registry = "https://pypi.org/simple" }
|
408
|
+
sdist = { url = "https://files.pythonhosted.org/packages/f6/37/23083fcd6e35492953e8d2aaaa68b860eb422b34627b13f2ce3eb6106061/typing_extensions-4.13.2.tar.gz", hash = "sha256:e6c81219bd689f51865d9e372991c540bda33a0379d5573cddb9a3a23f7caaef", size = 106967 }
|
409
|
+
wheels = [
|
410
|
+
{ url = "https://files.pythonhosted.org/packages/8b/54/b1ae86c0973cc6f0210b53d508ca3641fb6d0c56823f288d108bc7ab3cc8/typing_extensions-4.13.2-py3-none-any.whl", hash = "sha256:a439e7c04b49fec3e5d3e2beaa21755cadbbdc391694e28ccdd36ca4a1408f8c", size = 45806 },
|
411
|
+
]
|
412
|
+
|
413
|
+
[[package]]
|
414
|
+
name = "typing-inspection"
|
415
|
+
version = "0.4.0"
|
416
|
+
source = { registry = "https://pypi.org/simple" }
|
417
|
+
dependencies = [
|
418
|
+
{ name = "typing-extensions" },
|
419
|
+
]
|
420
|
+
sdist = { url = "https://files.pythonhosted.org/packages/82/5c/e6082df02e215b846b4b8c0b887a64d7d08ffaba30605502639d44c06b82/typing_inspection-0.4.0.tar.gz", hash = "sha256:9765c87de36671694a67904bf2c96e395be9c6439bb6c87b5142569dcdd65122", size = 76222 }
|
421
|
+
wheels = [
|
422
|
+
{ url = "https://files.pythonhosted.org/packages/31/08/aa4fdfb71f7de5176385bd9e90852eaf6b5d622735020ad600f2bab54385/typing_inspection-0.4.0-py3-none-any.whl", hash = "sha256:50e72559fcd2a6367a19f7a7e610e6afcb9fac940c650290eed893d61386832f", size = 14125 },
|
423
|
+
]
|
424
|
+
|
425
|
+
[[package]]
|
426
|
+
name = "uvicorn"
|
427
|
+
version = "0.34.1"
|
428
|
+
source = { registry = "https://pypi.org/simple" }
|
429
|
+
dependencies = [
|
430
|
+
{ name = "click" },
|
431
|
+
{ name = "h11" },
|
432
|
+
]
|
433
|
+
sdist = { url = "https://files.pythonhosted.org/packages/86/37/dd92f1f9cedb5eaf74d9999044306e06abe65344ff197864175dbbd91871/uvicorn-0.34.1.tar.gz", hash = "sha256:af981725fc4b7ffc5cb3b0e9eda6258a90c4b52cb2a83ce567ae0a7ae1757afc", size = 76755 }
|
434
|
+
wheels = [
|
435
|
+
{ url = "https://files.pythonhosted.org/packages/5f/38/a5801450940a858c102a7ad9e6150146a25406a119851c993148d56ab041/uvicorn-0.34.1-py3-none-any.whl", hash = "sha256:984c3a8c7ca18ebaad15995ee7401179212c59521e67bfc390c07fa2b8d2e065", size = 62404 },
|
436
|
+
]
|
437
|
+
|
438
|
+
[[package]]
|
439
|
+
name = "websockets"
|
440
|
+
version = "15.0.1"
|
441
|
+
source = { registry = "https://pypi.org/simple" }
|
442
|
+
sdist = { url = "https://files.pythonhosted.org/packages/21/e6/26d09fab466b7ca9c7737474c52be4f76a40301b08362eb2dbc19dcc16c1/websockets-15.0.1.tar.gz", hash = "sha256:82544de02076bafba038ce055ee6412d68da13ab47f0c60cab827346de828dee", size = 177016 }
|
443
|
+
wheels = [
|
444
|
+
{ url = "https://files.pythonhosted.org/packages/cb/9f/51f0cf64471a9d2b4d0fc6c534f323b664e7095640c34562f5182e5a7195/websockets-15.0.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ee443ef070bb3b6ed74514f5efaa37a252af57c90eb33b956d35c8e9c10a1931", size = 175440 },
|
445
|
+
{ url = "https://files.pythonhosted.org/packages/8a/05/aa116ec9943c718905997412c5989f7ed671bc0188ee2ba89520e8765d7b/websockets-15.0.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5a939de6b7b4e18ca683218320fc67ea886038265fd1ed30173f5ce3f8e85675", size = 173098 },
|
446
|
+
{ url = "https://files.pythonhosted.org/packages/ff/0b/33cef55ff24f2d92924923c99926dcce78e7bd922d649467f0eda8368923/websockets-15.0.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:746ee8dba912cd6fc889a8147168991d50ed70447bf18bcda7039f7d2e3d9151", size = 173329 },
|
447
|
+
{ url = "https://files.pythonhosted.org/packages/31/1d/063b25dcc01faa8fada1469bdf769de3768b7044eac9d41f734fd7b6ad6d/websockets-15.0.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:595b6c3969023ecf9041b2936ac3827e4623bfa3ccf007575f04c5a6aa318c22", size = 183111 },
|
448
|
+
{ url = "https://files.pythonhosted.org/packages/93/53/9a87ee494a51bf63e4ec9241c1ccc4f7c2f45fff85d5bde2ff74fcb68b9e/websockets-15.0.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3c714d2fc58b5ca3e285461a4cc0c9a66bd0e24c5da9911e30158286c9b5be7f", size = 182054 },
|
449
|
+
{ url = "https://files.pythonhosted.org/packages/ff/b2/83a6ddf56cdcbad4e3d841fcc55d6ba7d19aeb89c50f24dd7e859ec0805f/websockets-15.0.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f3c1e2ab208db911594ae5b4f79addeb3501604a165019dd221c0bdcabe4db8", size = 182496 },
|
450
|
+
{ url = "https://files.pythonhosted.org/packages/98/41/e7038944ed0abf34c45aa4635ba28136f06052e08fc2168520bb8b25149f/websockets-15.0.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:229cf1d3ca6c1804400b0a9790dc66528e08a6a1feec0d5040e8b9eb14422375", size = 182829 },
|
451
|
+
{ url = "https://files.pythonhosted.org/packages/e0/17/de15b6158680c7623c6ef0db361da965ab25d813ae54fcfeae2e5b9ef910/websockets-15.0.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:756c56e867a90fb00177d530dca4b097dd753cde348448a1012ed6c5131f8b7d", size = 182217 },
|
452
|
+
{ url = "https://files.pythonhosted.org/packages/33/2b/1f168cb6041853eef0362fb9554c3824367c5560cbdaad89ac40f8c2edfc/websockets-15.0.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:558d023b3df0bffe50a04e710bc87742de35060580a293c2a984299ed83bc4e4", size = 182195 },
|
453
|
+
{ url = "https://files.pythonhosted.org/packages/86/eb/20b6cdf273913d0ad05a6a14aed4b9a85591c18a987a3d47f20fa13dcc47/websockets-15.0.1-cp313-cp313-win32.whl", hash = "sha256:ba9e56e8ceeeedb2e080147ba85ffcd5cd0711b89576b83784d8605a7df455fa", size = 176393 },
|
454
|
+
{ url = "https://files.pythonhosted.org/packages/1b/6c/c65773d6cab416a64d191d6ee8a8b1c68a09970ea6909d16965d26bfed1e/websockets-15.0.1-cp313-cp313-win_amd64.whl", hash = "sha256:e09473f095a819042ecb2ab9465aee615bd9c2028e4ef7d933600a8401c79561", size = 176837 },
|
455
|
+
{ url = "https://files.pythonhosted.org/packages/fa/a8/5b41e0da817d64113292ab1f8247140aac61cbf6cfd085d6a0fa77f4984f/websockets-15.0.1-py3-none-any.whl", hash = "sha256:f7a866fbc1e97b5c617ee4116daaa09b722101d4a3c170c787450ba409f9736f", size = 169743 },
|
456
|
+
]
|
457
|
+
|
458
|
+
[[package]]
|
459
|
+
name = "winrt-runtime"
|
460
|
+
version = "3.1.0"
|
461
|
+
source = { registry = "https://pypi.org/simple" }
|
462
|
+
dependencies = [
|
463
|
+
{ name = "typing-extensions" },
|
464
|
+
]
|
465
|
+
sdist = { url = "https://files.pythonhosted.org/packages/1a/e3/eb3bd683e73e224214e3809b0100b97bf36cf0bf18119b47631a3ed59681/winrt_runtime-3.1.0.tar.gz", hash = "sha256:943d01a960a3d3c55da8c98eeb66ec801e2306c17fe70eaad3b97b2fd248368b", size = 19535 }
|
466
|
+
wheels = [
|
467
|
+
{ url = "https://files.pythonhosted.org/packages/57/24/ca2192ae5b69c82fa624845fe8c63790edddd3992ea3d83e790ec5067b77/winrt_runtime-3.1.0-cp313-cp313-win32.whl", hash = "sha256:7d92db2810c2d6c7148c3817b7d57fc2b3e6c433d644a2097485d4c6dfd92cad", size = 205876 },
|
468
|
+
{ url = "https://files.pythonhosted.org/packages/b4/a1/bc84e44a36a01b8633e59d7ea7994795f9d93bebe7080ab7f237f3006da2/winrt_runtime-3.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:378bfded5b8c20b34c0d68be317e05031b37d1c168c50afca40e7af6863934e0", size = 236867 },
|
469
|
+
{ url = "https://files.pythonhosted.org/packages/32/53/117d97ec277c06494f3de67523634c9a5d846bc74b1a42162cc3e79c5f5f/winrt_runtime-3.1.0-cp313-cp313-win_arm64.whl", hash = "sha256:ca3f4c728973194c6b07a18be25ba6d3eee08e6bf5bd6eaec4dee482be30811c", size = 411040 },
|
470
|
+
]
|
471
|
+
|
472
|
+
[[package]]
|
473
|
+
name = "winrt-windows-data-xml-dom"
|
474
|
+
version = "3.1.0"
|
475
|
+
source = { registry = "https://pypi.org/simple" }
|
476
|
+
dependencies = [
|
477
|
+
{ name = "winrt-runtime" },
|
478
|
+
]
|
479
|
+
sdist = { url = "https://files.pythonhosted.org/packages/29/af/a2f6a48ae1acfde32a71a81139431c8f168d53daafe2ee0694e75a22a4eb/winrt_windows_data_xml_dom-3.1.0.tar.gz", hash = "sha256:0c73578e55c1b78bd815a31c898d187d15d109a6941d6ddd06cf9e03385b538a", size = 49929 }
|
480
|
+
wheels = [
|
481
|
+
{ url = "https://files.pythonhosted.org/packages/1c/9b/8d19cf3a0a8704156c08cffcf29b2a2f6db17a30510b676dbdcea66342c3/winrt_windows_data_xml_dom-3.1.0-cp313-cp313-win32.whl", hash = "sha256:a03ccc90be458f09bd27fb7ceb58222f4c540ca2e2874ac94755770dc28f9d5a", size = 154835 },
|
482
|
+
{ url = "https://files.pythonhosted.org/packages/76/5a/99b119d63a682476952ee345f978290854664a6fcb8e425f0ff564afc3cb/winrt_windows_data_xml_dom-3.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:cbf37bc5a6fac3d4890e08c838ce17225f477a9ae5c29fe56f34e190705d01f4", size = 184611 },
|
483
|
+
{ url = "https://files.pythonhosted.org/packages/56/cf/39960b8183be0d333b3ddf9e6f64aeda5b8b4b289d98a166da57d7c82f6b/winrt_windows_data_xml_dom-3.1.0-cp313-cp313-win_arm64.whl", hash = "sha256:124e8182b073d12a17b4ca7bce23892786fa9b77751915cd44b2e3b170638b00", size = 156376 },
|
484
|
+
]
|
485
|
+
|
486
|
+
[[package]]
|
487
|
+
name = "winrt-windows-foundation"
|
488
|
+
version = "3.1.0"
|
489
|
+
source = { registry = "https://pypi.org/simple" }
|
490
|
+
dependencies = [
|
491
|
+
{ name = "winrt-runtime" },
|
492
|
+
]
|
493
|
+
sdist = { url = "https://files.pythonhosted.org/packages/62/b3/7ab7c1c9c7714a6de0ff0b774906a0211a1b5a4e9fbf6febfa4949a0c4ef/winrt_windows_foundation-3.1.0.tar.gz", hash = "sha256:3a2f9243b76fe093c74f8aad8cc3c7c93c6ec2a9498817058d85de0a2e9b083d", size = 30000 }
|
494
|
+
wheels = [
|
495
|
+
{ url = "https://files.pythonhosted.org/packages/ba/c7/e913020310fbc5045f417d3dbde69996933e9a1de7e8eab85f5ff789edd7/winrt_windows_foundation-3.1.0-cp313-cp313-win32.whl", hash = "sha256:0a7770d76e0dfd00092c1a3a3ac33455e6aa4fd73b51fd16e787aa1202f31bef", size = 110283 },
|
496
|
+
{ url = "https://files.pythonhosted.org/packages/b0/d0/8e293cd83e48c4edfe2cb39997344acf1215f90972358582947e155c74a9/winrt_windows_foundation-3.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:395fd880941ce04e2e089e02452e6e6c4c0b991ba1f5f1f4bbad50c2d30915f5", size = 118840 },
|
497
|
+
{ url = "https://files.pythonhosted.org/packages/19/04/c17bcde5983c3355473d90eb3eab895f2b00ab1c75f8e7054dbf41515089/winrt_windows_foundation-3.1.0-cp313-cp313-win_arm64.whl", hash = "sha256:c89b2076117de98848f5356fc16a97444eb0bcabbf2cae12534f6d40c2d6d6e0", size = 109327 },
|
498
|
+
]
|
499
|
+
|
500
|
+
[[package]]
|
501
|
+
name = "winrt-windows-foundation-collections"
|
502
|
+
version = "3.1.0"
|
503
|
+
source = { registry = "https://pypi.org/simple" }
|
504
|
+
dependencies = [
|
505
|
+
{ name = "winrt-runtime" },
|
506
|
+
]
|
507
|
+
sdist = { url = "https://files.pythonhosted.org/packages/0b/82/af3055af2f40ee6a3c9a9418ffb8d33e6744ebe42714bc393ec3d44dfd2d/winrt_windows_foundation_collections-3.1.0.tar.gz", hash = "sha256:7ab521a42031f8f16898460f2b8efc151c1b7e88ccfb164f6412cce03af533a5", size = 15947 }
|
508
|
+
wheels = [
|
509
|
+
{ url = "https://files.pythonhosted.org/packages/0f/ec/684b7e66fd1db9e26a4f7fad0d8e537a2e6a33a2890ecef104216f3fbeca/winrt_windows_foundation_collections-3.1.0-cp313-cp313-win32.whl", hash = "sha256:131a7a4ddde1699ea80d0f7da1610b0aaec719c46bbdbd2bd489d2cd8c7ba7e8", size = 59048 },
|
510
|
+
{ url = "https://files.pythonhosted.org/packages/71/f7/eb6366862de443fdbcf64a7f18bbdff071445ec404e67d51ac394c2c309a/winrt_windows_foundation_collections-3.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:ee297077a573bc6ad17b731b326db1bf5818caa7d724b70104fe6bceceaeea12", size = 68064 },
|
511
|
+
{ url = "https://files.pythonhosted.org/packages/d9/bc/c2f59ba029130de4b7023414d6abd47842a61e8dc5cf8ad01c07e0cce1f9/winrt_windows_foundation_collections-3.1.0-cp313-cp313-win_arm64.whl", hash = "sha256:cd95c677dec999327627a9f324d9ee975f9e224107e74c3902aa83d06ca68a86", size = 57805 },
|
512
|
+
]
|
513
|
+
|
514
|
+
[[package]]
|
515
|
+
name = "winrt-windows-media-control"
|
516
|
+
version = "3.1.0"
|
517
|
+
source = { registry = "https://pypi.org/simple" }
|
518
|
+
dependencies = [
|
519
|
+
{ name = "winrt-runtime" },
|
520
|
+
]
|
521
|
+
sdist = { url = "https://files.pythonhosted.org/packages/e8/a3/e44b0f02baab77d98dad75d86065fb37276d5e105d1997bc8e85cb2c5176/winrt_windows_media_control-3.1.0.tar.gz", hash = "sha256:15f8de2291bd896d24ce62f27b175829aa12e3483ede753f436f2342311e667a", size = 12065 }
|
522
|
+
wheels = [
|
523
|
+
{ url = "https://files.pythonhosted.org/packages/34/5a/a6a8b0fd921206ef070bb718da092e68c74b94d14627d63c40379c6e8080/winrt_windows_media_control-3.1.0-cp313-cp313-win32.whl", hash = "sha256:0b7d8917b742d22692bcd27294f6f3f358192a546131a60fc709d1d082bfa02d", size = 60700 },
|
524
|
+
{ url = "https://files.pythonhosted.org/packages/6d/b8/ba2d4c413fcd74260fc7722da4057ccc1dc76586fd11ea4bd61c2f64063b/winrt_windows_media_control-3.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:88219a29db06a6fb3392d52af04bb36b2267192f211dce0e1522dfcf9228e380", size = 64100 },
|
525
|
+
{ url = "https://files.pythonhosted.org/packages/11/3a/fbd05ed7057613cf605f7eb0dab05d112d3d4ac473df443467fdebb880bf/winrt_windows_media_control-3.1.0-cp313-cp313-win_arm64.whl", hash = "sha256:ebaa57ab082c0e95eec05f932fe53916000c8e73effb67b8d63936b294b4fa96", size = 58813 },
|
526
|
+
]
|
527
|
+
|
528
|
+
[[package]]
|
529
|
+
name = "winrt-windows-ui-notifications"
|
530
|
+
version = "3.1.0"
|
531
|
+
source = { registry = "https://pypi.org/simple" }
|
532
|
+
dependencies = [
|
533
|
+
{ name = "winrt-runtime" },
|
534
|
+
]
|
535
|
+
sdist = { url = "https://files.pythonhosted.org/packages/d2/17/90e6344dd5f8ded8b9c3203dc0d4319ace37ee0e3590942716a92a52cb46/winrt_windows_ui_notifications-3.1.0.tar.gz", hash = "sha256:40f1d559004e0aad840c79a6f494f2f48e89c2cfbb72207a7a6127dd452a4aeb", size = 28883 }
|
536
|
+
wheels = [
|
537
|
+
{ url = "https://files.pythonhosted.org/packages/d6/1d/e69cd16f983ad93e0a44bcc60612d4b0a36e8afe506953788833cc030954/winrt_windows_ui_notifications-3.1.0-cp313-cp313-win32.whl", hash = "sha256:2e4f5b649548ba4b9bb60cf32c4dfa9fa0ca856f49ebb0744a0b0e923d97679e", size = 152993 },
|
538
|
+
{ url = "https://files.pythonhosted.org/packages/06/9a/2edd19b47e7981e6829af2b1af2a451ae5cc6c78c7c8330f6c7b917b9962/winrt_windows_ui_notifications-3.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:93fa5dc40245102a04b4e8b69f2a71aaea045b4a1fdcd8eca19db24241f2496e", size = 166530 },
|
539
|
+
{ url = "https://files.pythonhosted.org/packages/2c/f2/ff5ba93ff76a56c453c3b955f20917f78a17069d6ac21f38dfc9e34ba1d1/winrt_windows_ui_notifications-3.1.0-cp313-cp313-win_arm64.whl", hash = "sha256:3eabd14415781ee3709222bddd9862ad061c9cb5c955d1b4454244c1438acf34", size = 154131 },
|
540
|
+
]
|