provide-uterm-server 0.5.0__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.
- provide_uterm_server-0.5.0/PKG-INFO +61 -0
- provide_uterm_server-0.5.0/VERSION +1 -0
- provide_uterm_server-0.5.0/pyproject.toml +205 -0
- provide_uterm_server-0.5.0/setup.cfg +4 -0
- provide_uterm_server-0.5.0/src/provide/uterm/cli/__init__.py +470 -0
- provide_uterm_server-0.5.0/src/provide/uterm/cli/_watch_app.py +317 -0
- provide_uterm_server-0.5.0/src/provide/uterm/cli/audit.py +81 -0
- provide_uterm_server-0.5.0/src/provide/uterm/cli/inspect.py +456 -0
- provide_uterm_server-0.5.0/src/provide/uterm/cli/share.py +318 -0
- provide_uterm_server-0.5.0/src/provide/uterm/cli/tunnel.py +267 -0
- provide_uterm_server-0.5.0/src/provide/uterm/cli/watch.py +95 -0
- provide_uterm_server-0.5.0/src/provide/uterm/fastapi_utils.py +285 -0
- provide_uterm_server-0.5.0/src/provide/uterm/gateway/__init__.py +69 -0
- provide_uterm_server-0.5.0/src/provide/uterm/gateway/_gateway.py +689 -0
- provide_uterm_server-0.5.0/src/provide/uterm/gateway/_iac_negotiate.py +330 -0
- provide_uterm_server-0.5.0/src/provide/uterm/gateway/_ssh_gateway.py +198 -0
- provide_uterm_server-0.5.0/src/provide/uterm/gateway/_ssh_handler.py +439 -0
- provide_uterm_server-0.5.0/src/provide/uterm/gateway/_telnet_gateway.py +206 -0
- provide_uterm_server-0.5.0/src/provide/uterm/py.typed +0 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/__init__.py +35 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/_http.py +62 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/_net.py +54 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/api_keys.py +158 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/app/__init__.py +41 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/app/assets.py +29 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/app/auth.py +311 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/app/connectors.py +64 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/app/control_plane.py +82 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/app/factory.py +11 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/app/factory_components.py +282 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/app/factory_impl.py +610 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/app/factory_sweeps.py +264 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/app/factory_tunnel_auth.py +177 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/app/hub_authz.py +120 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/app/middleware.py +204 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/app/posture.py +146 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/app/routes_wiring.py +118 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/app/ws_denial.py +116 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/audit.py +92 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/audit_chain.py +397 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/auth.py +440 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/auth_roles.py +29 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/auth_webhook.py +274 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/authorization.py +438 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/__init__.py +35 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/fanout/__init__.py +21 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/fanout/_collector.py +184 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/fanout/_controller.py +656 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/fanout/_divergence.py +51 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/fanout/_models.py +54 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/fanout/_routes.py +205 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/fanout/_store.py +79 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/frames.py +288 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/hub/__init__.py +224 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/hub/approvals.py +192 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/hub/connection.py +584 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/hub/connection_hijack.py +166 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/hub/connections.py +49 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/hub/core.py +36 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/hub/core_delegates_connection.py +90 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/hub/core_delegates_lease.py +104 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/hub/core_helpers.py +67 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/hub/core_impl.py +751 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/hub/core_orchestration.py +305 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/hub/event_bus.py +515 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/hub/ext.py +421 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/hub/lease.py +722 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/hub/limiter.py +198 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/hub/polling_service.py +258 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/hub/presence.py +166 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/hub/redaction.py +75 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/hub/redaction_defaults.py +134 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/hub/registry.py +102 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/hub/resume.py +293 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/hub/router.py +11 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/hub/router_behavioral.py +118 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/hub/router_broadcast.py +558 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/hub/router_impl.py +613 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/hub/router_redaction.py +88 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/hub/semantics.py +97 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/hub/snapshot_metrics.py +47 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/hub/store.py +301 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/identity.py +47 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/models.py +249 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/ratelimit.py +57 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/rest_helpers.py +123 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/routes/__init__.py +31 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/routes/browser_handlers.py +587 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/routes/rest.py +527 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/routes/rest_gui.py +272 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/routes/rest_workerctl.py +81 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/routes/websockets.py +27 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/routes/websockets_browser.py +182 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/routes/websockets_impl.py +475 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/routes/websockets_worker.py +205 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/routes/ws_gui_vnc.py +349 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/worker_link.py +546 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/cli.py +98 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/config.py +75 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/config_schema.py +644 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/config_schema_session.py +133 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/connectors/__init__.py +38 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/connectors/base.py +54 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/connectors/registry.py +60 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/connectors/shell.py +278 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/connectors/ssh.py +299 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/connectors/telnet.py +201 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/connectors/websocket.py +232 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/dev_idp.py +148 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/discovery.py +52 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/egress.py +284 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/frontend/.vite/manifest.json +11 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/frontend/assets/hijack-By88gYiP.css +1 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/frontend/assets/hijack-EOSnykbf.js +1 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/frontend/assets/hijack-u6InuX0q.js +481 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/frontend/assets/hijack_script-BIYHv3dN.js +1 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/frontend/assets/main-D1LRXeuH.css +1 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/frontend/assets/main-zEqPHxNk.js +985 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/frontend/assets/modulepreload-polyfill-P2Xu9kJm.js +1 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/frontend/assets/panels-B8G9U-I_.css +1 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/frontend/assets/panels-Bfu9DoaK.js +1 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/frontend/assets/panels_script-C4XrWEgD.js +1 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/frontend/assets/rfb-NV_fh9Db.js +5 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/frontend/assets/terminal-BAJVEpkf.js +1 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/frontend/assets/terminal-BX3-tGv7.css +1 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/frontend/assets/terminal-DkHy54zN.js +1 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/frontend/assets/terminal-ShPuoZF-.css +1 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/frontend/assets/terminal-element-BYg3GDC2.js +98 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/frontend/assets/terminal-links-wV5GI_Mz.js +2 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/frontend/assets/terminal_script-mD6Xem-Y.js +1 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/frontend/assets/vnc-Dw30jYyv.css +1 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/frontend/assets/vnc-page-BUhHaJtu.js +1 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/frontend/assets/vnc_script-CDy1Xbzb.js +1 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/frontend/hijack.html +56 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/frontend/panels.html +42 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/frontend/terminal.html +23 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/frontend/vanilla-manifest.json +128 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/frontend/vite-manifest.json +11 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/frontend/vnc.html +66 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/graphical_routes.py +388 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/graphical_targets.py +434 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/gui_session.py +147 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/models.py +122 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/pam_integration.py +363 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/pam_tunnel.py +105 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/policy.py +27 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/profiles.py +136 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/recording.py +77 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/registry.py +549 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/routes/__init__.py +13 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/routes/_helpers.py +70 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/routes/api.py +72 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/routes/api_keys.py +139 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/routes/approvals.py +116 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/routes/health.py +157 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/routes/pages.py +251 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/routes/pam_events.py +147 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/routes/profiles.py +220 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/routes/route_defs.py +115 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/routes/sessions.py +542 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/routes/sse.py +112 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/routes/tunnels.py +411 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/routes/webhooks.py +207 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/runtime.py +525 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/runtime_helpers.py +72 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/security.py +82 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/tracing.py +63 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/tunnel_invites.py +118 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/ui.py +381 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/vnc_upstream.py +253 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/webhook_signing.py +58 -0
- provide_uterm_server-0.5.0/src/provide/uterm/server/webhooks.py +641 -0
- provide_uterm_server-0.5.0/src/provide/uterm/tunnel/__init__.py +35 -0
- provide_uterm_server-0.5.0/src/provide/uterm/tunnel/client.py +155 -0
- provide_uterm_server-0.5.0/src/provide/uterm/tunnel/fastapi_routes.py +208 -0
- provide_uterm_server-0.5.0/src/provide/uterm/tunnel/http_proxy.py +70 -0
- provide_uterm_server-0.5.0/src/provide/uterm/tunnel/intercept.py +154 -0
- provide_uterm_server-0.5.0/src/provide/uterm/tunnel/protocol.py +81 -0
- provide_uterm_server-0.5.0/src/provide/uterm/tunnel/pty_capture.py +165 -0
- provide_uterm_server-0.5.0/src/provide/uterm/tunnel/token_hash.py +50 -0
- provide_uterm_server-0.5.0/src/provide/uterm/tunnel/types.py +73 -0
- provide_uterm_server-0.5.0/src/provide_uterm_server.egg-info/PKG-INFO +61 -0
- provide_uterm_server-0.5.0/src/provide_uterm_server.egg-info/SOURCES.txt +192 -0
- provide_uterm_server-0.5.0/src/provide_uterm_server.egg-info/dependency_links.txt +1 -0
- provide_uterm_server-0.5.0/src/provide_uterm_server.egg-info/entry_points.txt +2 -0
- provide_uterm_server-0.5.0/src/provide_uterm_server.egg-info/requires.txt +62 -0
- provide_uterm_server-0.5.0/src/provide_uterm_server.egg-info/top_level.txt +1 -0
- provide_uterm_server-0.5.0/tests/test_config_schema.py +95 -0
- provide_uterm_server-0.5.0/tests/test_csharp_mutation_gate_budget.py +113 -0
- provide_uterm_server-0.5.0/tests/test_go_mutation_gate_budget.py +155 -0
- provide_uterm_server-0.5.0/tests/test_hostile_profile_availability.py +219 -0
- provide_uterm_server-0.5.0/tests/test_mutation_gate_allowlist.py +531 -0
- provide_uterm_server-0.5.0/tests/test_namespace_ownership.py +28 -0
- provide_uterm_server-0.5.0/tests/test_package_init.py +55 -0
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: provide-uterm-server
|
|
3
|
+
Version: 0.5.0
|
|
4
|
+
Summary: Server, bridge, tunnel, and gateway for provide-uterm
|
|
5
|
+
License-Expression: AGPL-3.0-or-later
|
|
6
|
+
Requires-Python: >=3.11
|
|
7
|
+
Requires-Dist: provide-uterm>=0.5.0
|
|
8
|
+
Requires-Dist: provide-uterm-client>=0.5.0
|
|
9
|
+
Requires-Dist: pydantic>=2.0
|
|
10
|
+
Provides-Extra: server
|
|
11
|
+
Requires-Dist: fastapi>=0.110; extra == "server"
|
|
12
|
+
Requires-Dist: uvicorn>=0.24; extra == "server"
|
|
13
|
+
Requires-Dist: pyjwt>=2.9; extra == "server"
|
|
14
|
+
Requires-Dist: websockets>=12.0; extra == "server"
|
|
15
|
+
Provides-Extra: cli
|
|
16
|
+
Requires-Dist: fastapi>=0.110; extra == "cli"
|
|
17
|
+
Requires-Dist: uvicorn>=0.24; extra == "cli"
|
|
18
|
+
Requires-Dist: websockets>=12.0; extra == "cli"
|
|
19
|
+
Requires-Dist: textual>=0.50; extra == "cli"
|
|
20
|
+
Requires-Dist: httpx2>=2.10; extra == "cli"
|
|
21
|
+
Provides-Extra: tunnel
|
|
22
|
+
Requires-Dist: httpx2>=2.10; extra == "tunnel"
|
|
23
|
+
Requires-Dist: uvicorn>=0.24; extra == "tunnel"
|
|
24
|
+
Requires-Dist: websockets>=16.0; extra == "tunnel"
|
|
25
|
+
Requires-Dist: fastapi>=0.110; extra == "tunnel"
|
|
26
|
+
Provides-Extra: gateway
|
|
27
|
+
Requires-Dist: asyncssh>=2.22.0; extra == "gateway"
|
|
28
|
+
Requires-Dist: websockets>=16.0; extra == "gateway"
|
|
29
|
+
Provides-Extra: annotation
|
|
30
|
+
Requires-Dist: provide-uterm-annotation>=0.5.0; extra == "annotation"
|
|
31
|
+
Provides-Extra: all
|
|
32
|
+
Requires-Dist: fastapi>=0.110; extra == "all"
|
|
33
|
+
Requires-Dist: uvicorn>=0.24; extra == "all"
|
|
34
|
+
Requires-Dist: pyjwt>=2.9; extra == "all"
|
|
35
|
+
Requires-Dist: websockets>=16.0; extra == "all"
|
|
36
|
+
Requires-Dist: textual>=0.50; extra == "all"
|
|
37
|
+
Requires-Dist: httpx2>=2.10; extra == "all"
|
|
38
|
+
Requires-Dist: asyncssh>=2.22.0; extra == "all"
|
|
39
|
+
Requires-Dist: provide-uterm-annotation>=0.5.0; extra == "all"
|
|
40
|
+
Requires-Dist: pyte>=0.8; extra == "all"
|
|
41
|
+
Provides-Extra: dev
|
|
42
|
+
Requires-Dist: pytest>=9.0; extra == "dev"
|
|
43
|
+
Requires-Dist: pytest-asyncio>=1.3; extra == "dev"
|
|
44
|
+
Requires-Dist: hypothesis>=6.151.9; extra == "dev"
|
|
45
|
+
Requires-Dist: pytest-cov>=7.0; extra == "dev"
|
|
46
|
+
Requires-Dist: pytest-timeout>=2.4.0; extra == "dev"
|
|
47
|
+
Requires-Dist: pytest-randomly>=3.15.0; extra == "dev"
|
|
48
|
+
Requires-Dist: pytest-textual-snapshot>=1.0.0; extra == "dev"
|
|
49
|
+
Requires-Dist: mypy>=1.19; extra == "dev"
|
|
50
|
+
Requires-Dist: ruff>=0.15; extra == "dev"
|
|
51
|
+
Requires-Dist: fastapi>=0.110; extra == "dev"
|
|
52
|
+
Requires-Dist: uvicorn>=0.24; extra == "dev"
|
|
53
|
+
Requires-Dist: pyjwt>=2.9; extra == "dev"
|
|
54
|
+
Requires-Dist: websockets>=16.0; extra == "dev"
|
|
55
|
+
Requires-Dist: textual>=0.50; extra == "dev"
|
|
56
|
+
Requires-Dist: httpx2>=2.10; extra == "dev"
|
|
57
|
+
Requires-Dist: asyncssh>=2.22.0; extra == "dev"
|
|
58
|
+
Requires-Dist: Pillow>=10.0; extra == "dev"
|
|
59
|
+
Requires-Dist: pydantic>=2.0; extra == "dev"
|
|
60
|
+
Requires-Dist: pyyaml>=6.0; extra == "dev"
|
|
61
|
+
Requires-Dist: provide-uterm-annotation>=0.5.0; extra == "dev"
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.5.0
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: Copyright (c) 2025-2026 provide.io llc. All rights reserved.
|
|
2
|
+
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
3
|
+
|
|
4
|
+
[build-system]
|
|
5
|
+
requires = ["setuptools>=61.0", "wheel"]
|
|
6
|
+
build-backend = "setuptools.build_meta"
|
|
7
|
+
|
|
8
|
+
[project]
|
|
9
|
+
name = "provide-uterm-server"
|
|
10
|
+
dynamic = ["version"]
|
|
11
|
+
description = "Server, bridge, tunnel, and gateway for provide-uterm"
|
|
12
|
+
requires-python = ">=3.11"
|
|
13
|
+
license = "AGPL-3.0-or-later"
|
|
14
|
+
dependencies = [
|
|
15
|
+
"provide-uterm>=0.5.0",
|
|
16
|
+
"provide-uterm-client>=0.5.0",
|
|
17
|
+
# Imported directly by config.py, config_schema*.py and the bridge frame
|
|
18
|
+
# builders — declared here rather than inherited from provide-uterm, since a
|
|
19
|
+
# direct import belongs in the importing package's own dependencies.
|
|
20
|
+
"pydantic>=2.0",
|
|
21
|
+
]
|
|
22
|
+
|
|
23
|
+
[project.optional-dependencies]
|
|
24
|
+
server = ["fastapi>=0.110", "uvicorn>=0.24", "pyjwt>=2.9", "websockets>=12.0"]
|
|
25
|
+
cli = ["fastapi>=0.110", "uvicorn>=0.24", "websockets>=12.0", "textual>=0.50", "httpx2>=2.10"]
|
|
26
|
+
tunnel = ["httpx2>=2.10", "uvicorn>=0.24", "websockets>=16.0", "fastapi>=0.110"]
|
|
27
|
+
gateway = ["asyncssh>=2.22.0", "websockets>=16.0"]
|
|
28
|
+
# Optional: PatternDetector + built-in rules + annotation models. Lives in the
|
|
29
|
+
# separate provide-uterm-annotation package so deployments that don't need
|
|
30
|
+
# pattern detection can ship a leaner wheel. The factory imports it lazily and
|
|
31
|
+
# raises a friendly RuntimeError if it isn't installed.
|
|
32
|
+
annotation = ["provide-uterm-annotation>=0.5.0"]
|
|
33
|
+
all = [
|
|
34
|
+
"fastapi>=0.110", "uvicorn>=0.24", "pyjwt>=2.9", "websockets>=16.0",
|
|
35
|
+
"textual>=0.50", "httpx2>=2.10", "asyncssh>=2.22.0",
|
|
36
|
+
"provide-uterm-annotation>=0.5.0",
|
|
37
|
+
# core's emulator dep — declared here so `uv sync --extra all` installs it
|
|
38
|
+
# from the lock instead of a side-channel `uv pip install pyte` that
|
|
39
|
+
# escapes UV_FROZEN (unpinned, hash-unverified).
|
|
40
|
+
"pyte>=0.8",
|
|
41
|
+
]
|
|
42
|
+
dev = [
|
|
43
|
+
"pytest>=9.0",
|
|
44
|
+
"pytest-asyncio>=1.3",
|
|
45
|
+
# Six test modules under tests/ use @given / RuleBasedStateMachine
|
|
46
|
+
# (bridge/test_hypothesis*.py, server/test_auth_hypothesis.py,
|
|
47
|
+
# tunnel/test_token_hash_hypothesis.py, tunnel/test_*_stress.py). This was
|
|
48
|
+
# undeclared and only worked because CI installs the root dev group; an
|
|
49
|
+
# isolated `uv sync --package provide-uterm-server --extra dev` collect-errored.
|
|
50
|
+
"hypothesis>=6.151.9",
|
|
51
|
+
"pytest-cov>=7.0",
|
|
52
|
+
"pytest-timeout>=2.4.0",
|
|
53
|
+
"pytest-randomly>=3.15.0",
|
|
54
|
+
"pytest-textual-snapshot>=1.0.0",
|
|
55
|
+
"mypy>=1.19",
|
|
56
|
+
"ruff>=0.15",
|
|
57
|
+
"fastapi>=0.110",
|
|
58
|
+
"uvicorn>=0.24",
|
|
59
|
+
"pyjwt>=2.9",
|
|
60
|
+
"websockets>=16.0",
|
|
61
|
+
"textual>=0.50",
|
|
62
|
+
"httpx2>=2.10",
|
|
63
|
+
"asyncssh>=2.22.0",
|
|
64
|
+
"Pillow>=10.0",
|
|
65
|
+
"pydantic>=2.0",
|
|
66
|
+
"pyyaml>=6.0",
|
|
67
|
+
"provide-uterm-annotation>=0.5.0",
|
|
68
|
+
]
|
|
69
|
+
|
|
70
|
+
[project.scripts]
|
|
71
|
+
uterm = "provide.uterm.cli:main"
|
|
72
|
+
|
|
73
|
+
[tool.setuptools.dynamic]
|
|
74
|
+
version = {file = "VERSION"}
|
|
75
|
+
|
|
76
|
+
[tool.setuptools.packages.find]
|
|
77
|
+
where = ["src"]
|
|
78
|
+
|
|
79
|
+
[tool.setuptools.package-data]
|
|
80
|
+
"provide.uterm" = ["py.typed"]
|
|
81
|
+
# vite-manifest.json is the package-data-safe copy of .vite/manifest.json
|
|
82
|
+
# (setuptools recursive globs omit leading-dot dirs). Both patterns kept.
|
|
83
|
+
"provide.uterm.server" = [
|
|
84
|
+
"frontend/**",
|
|
85
|
+
"frontend/**/*",
|
|
86
|
+
"frontend/vite-manifest.json",
|
|
87
|
+
"frontend/.vite/*",
|
|
88
|
+
"frontend/.vite/**/*",
|
|
89
|
+
]
|
|
90
|
+
|
|
91
|
+
[tool.pytest.ini_options]
|
|
92
|
+
consider_namespace_packages = true
|
|
93
|
+
asyncio_mode = "auto"
|
|
94
|
+
asyncio_default_fixture_loop_scope = "function"
|
|
95
|
+
testpaths = ["tests"]
|
|
96
|
+
filterwarnings = [
|
|
97
|
+
"ignore:websockets\\.legacy is deprecated; see .*:DeprecationWarning:websockets\\.legacy",
|
|
98
|
+
"ignore:websockets\\.server\\.serve is deprecated:DeprecationWarning",
|
|
99
|
+
"ignore:websockets\\.server\\.WebSocketServerProtocol is deprecated:DeprecationWarning:uvicorn\\.protocols\\.websockets\\.websockets_impl",
|
|
100
|
+
"ignore:remove second argument of ws_handler:DeprecationWarning:websockets\\.legacy\\.server",
|
|
101
|
+
"ignore:This process \\(pid=.*\\) is multi-threaded, use of forkpty\\(\\) may lead to deadlocks in the child\\.:DeprecationWarning:pty",
|
|
102
|
+
]
|
|
103
|
+
markers = [
|
|
104
|
+
"playwright: browser-based UI tests (deselected by default, run with -m playwright)",
|
|
105
|
+
"slow: slow tests >10s (deselected by default)",
|
|
106
|
+
"unit: fast unit-level tests",
|
|
107
|
+
"mutant: mutation-testing harness tests (run by mutation gate only)",
|
|
108
|
+
]
|
|
109
|
+
addopts = [
|
|
110
|
+
"--import-mode=importlib",
|
|
111
|
+
"-v",
|
|
112
|
+
"--strict-markers",
|
|
113
|
+
"--strict-config",
|
|
114
|
+
"--tb=short",
|
|
115
|
+
"-ra",
|
|
116
|
+
"-m",
|
|
117
|
+
"not playwright and not slow",
|
|
118
|
+
"--cov=provide.uterm.server.bridge",
|
|
119
|
+
"--cov=provide.uterm.server",
|
|
120
|
+
"--cov=provide.uterm.tunnel",
|
|
121
|
+
"--cov=provide.uterm.gateway",
|
|
122
|
+
"--cov=provide.uterm.cli",
|
|
123
|
+
"--cov=provide.uterm.fastapi_utils",
|
|
124
|
+
"--cov-branch",
|
|
125
|
+
"--cov-report=term-missing",
|
|
126
|
+
"--cov-fail-under=100",
|
|
127
|
+
]
|
|
128
|
+
|
|
129
|
+
[tool.coverage.run]
|
|
130
|
+
source = [
|
|
131
|
+
"provide.uterm.server.bridge",
|
|
132
|
+
"provide.uterm.server",
|
|
133
|
+
"provide.uterm.tunnel",
|
|
134
|
+
"provide.uterm.gateway",
|
|
135
|
+
"provide.uterm.cli",
|
|
136
|
+
"provide.uterm.fastapi_utils",
|
|
137
|
+
]
|
|
138
|
+
omit = ["tests/*"]
|
|
139
|
+
branch = true
|
|
140
|
+
|
|
141
|
+
[tool.coverage.report]
|
|
142
|
+
fail_under = 100
|
|
143
|
+
show_missing = true
|
|
144
|
+
skip_covered = false
|
|
145
|
+
partial_branches = [
|
|
146
|
+
"pragma: no branch",
|
|
147
|
+
"if not msg.get\\(\"more_body\"",
|
|
148
|
+
"elif msg_type ==",
|
|
149
|
+
]
|
|
150
|
+
|
|
151
|
+
[tool.ruff]
|
|
152
|
+
target-version = "py311"
|
|
153
|
+
line-length = 120
|
|
154
|
+
|
|
155
|
+
[tool.ruff.lint]
|
|
156
|
+
select = [
|
|
157
|
+
"E", "W", "F", "I", "N", "UP", "B", "C4", "SIM", "TCH", "PTH",
|
|
158
|
+
"DTZ", "ICN", "ISC", "PERF", "PIE", "RET", "RSE", "TID", "S", "ARG", "RUF",
|
|
159
|
+
]
|
|
160
|
+
# Aligned with the workspace-root ruff config in ../../pyproject.toml so the
|
|
161
|
+
# subproject doesn't surface lint warnings the root deliberately ignores.
|
|
162
|
+
ignore = [
|
|
163
|
+
"E501", # line-too-long
|
|
164
|
+
"S101", # use-of-assert
|
|
165
|
+
"S104", # hardcoded-bind-all-interfaces
|
|
166
|
+
"S108", # hardcoded-temp-file
|
|
167
|
+
"S110", # try-except-pass
|
|
168
|
+
"S112", # try-except-continue
|
|
169
|
+
"S311", # suspicious-non-cryptographic-random
|
|
170
|
+
"S603", # subprocess-without-shell
|
|
171
|
+
"S607", # start-process-with-partial-path
|
|
172
|
+
"S604", # call-with-shell-equals-true
|
|
173
|
+
"F811", # redefined-while-unused
|
|
174
|
+
"N806", # non-lowercase-variable-in-function
|
|
175
|
+
"N814", # camelcase-imported-as-constant
|
|
176
|
+
"B017", # assert-raises-exception
|
|
177
|
+
"SIM105", # suppressible-exception
|
|
178
|
+
"SIM117", # multiple-with-statements
|
|
179
|
+
"ARG001", # unused-function-argument
|
|
180
|
+
"ARG002", # unused-method-argument — protocol interfaces
|
|
181
|
+
"PTH108", # os-unlink — stylistic
|
|
182
|
+
"SIM108", # ternary-operator — stylistic
|
|
183
|
+
"PERF401", # manual-list-comprehension
|
|
184
|
+
]
|
|
185
|
+
|
|
186
|
+
[tool.ruff.lint.isort]
|
|
187
|
+
known-first-party = ["provide"]
|
|
188
|
+
|
|
189
|
+
[tool.ruff.lint.per-file-ignores]
|
|
190
|
+
"__init__.py" = ["F401", "RUF022"]
|
|
191
|
+
"tests/**/*.py" = ["E402", "B905", "S101", "S105", "S106", "S110", "S603", "S607", "ARG", "TCH", "RUF003", "RUF012", "RUF015", "RUF043", "RUF059"]
|
|
192
|
+
|
|
193
|
+
[tool.mypy]
|
|
194
|
+
python_version = "3.11"
|
|
195
|
+
strict = true
|
|
196
|
+
namespace_packages = true
|
|
197
|
+
explicit_package_bases = true
|
|
198
|
+
mypy_path = ["src", "../provide-uterm-annotation/src"]
|
|
199
|
+
warn_return_any = true
|
|
200
|
+
warn_unused_configs = true
|
|
201
|
+
disallow_untyped_defs = true
|
|
202
|
+
disallow_any_generics = true
|
|
203
|
+
|
|
204
|
+
[tool.uv.sources]
|
|
205
|
+
provide-uterm-annotation = { workspace = true }
|