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.
Files changed (194) hide show
  1. provide_uterm_server-0.5.0/PKG-INFO +61 -0
  2. provide_uterm_server-0.5.0/VERSION +1 -0
  3. provide_uterm_server-0.5.0/pyproject.toml +205 -0
  4. provide_uterm_server-0.5.0/setup.cfg +4 -0
  5. provide_uterm_server-0.5.0/src/provide/uterm/cli/__init__.py +470 -0
  6. provide_uterm_server-0.5.0/src/provide/uterm/cli/_watch_app.py +317 -0
  7. provide_uterm_server-0.5.0/src/provide/uterm/cli/audit.py +81 -0
  8. provide_uterm_server-0.5.0/src/provide/uterm/cli/inspect.py +456 -0
  9. provide_uterm_server-0.5.0/src/provide/uterm/cli/share.py +318 -0
  10. provide_uterm_server-0.5.0/src/provide/uterm/cli/tunnel.py +267 -0
  11. provide_uterm_server-0.5.0/src/provide/uterm/cli/watch.py +95 -0
  12. provide_uterm_server-0.5.0/src/provide/uterm/fastapi_utils.py +285 -0
  13. provide_uterm_server-0.5.0/src/provide/uterm/gateway/__init__.py +69 -0
  14. provide_uterm_server-0.5.0/src/provide/uterm/gateway/_gateway.py +689 -0
  15. provide_uterm_server-0.5.0/src/provide/uterm/gateway/_iac_negotiate.py +330 -0
  16. provide_uterm_server-0.5.0/src/provide/uterm/gateway/_ssh_gateway.py +198 -0
  17. provide_uterm_server-0.5.0/src/provide/uterm/gateway/_ssh_handler.py +439 -0
  18. provide_uterm_server-0.5.0/src/provide/uterm/gateway/_telnet_gateway.py +206 -0
  19. provide_uterm_server-0.5.0/src/provide/uterm/py.typed +0 -0
  20. provide_uterm_server-0.5.0/src/provide/uterm/server/__init__.py +35 -0
  21. provide_uterm_server-0.5.0/src/provide/uterm/server/_http.py +62 -0
  22. provide_uterm_server-0.5.0/src/provide/uterm/server/_net.py +54 -0
  23. provide_uterm_server-0.5.0/src/provide/uterm/server/api_keys.py +158 -0
  24. provide_uterm_server-0.5.0/src/provide/uterm/server/app/__init__.py +41 -0
  25. provide_uterm_server-0.5.0/src/provide/uterm/server/app/assets.py +29 -0
  26. provide_uterm_server-0.5.0/src/provide/uterm/server/app/auth.py +311 -0
  27. provide_uterm_server-0.5.0/src/provide/uterm/server/app/connectors.py +64 -0
  28. provide_uterm_server-0.5.0/src/provide/uterm/server/app/control_plane.py +82 -0
  29. provide_uterm_server-0.5.0/src/provide/uterm/server/app/factory.py +11 -0
  30. provide_uterm_server-0.5.0/src/provide/uterm/server/app/factory_components.py +282 -0
  31. provide_uterm_server-0.5.0/src/provide/uterm/server/app/factory_impl.py +610 -0
  32. provide_uterm_server-0.5.0/src/provide/uterm/server/app/factory_sweeps.py +264 -0
  33. provide_uterm_server-0.5.0/src/provide/uterm/server/app/factory_tunnel_auth.py +177 -0
  34. provide_uterm_server-0.5.0/src/provide/uterm/server/app/hub_authz.py +120 -0
  35. provide_uterm_server-0.5.0/src/provide/uterm/server/app/middleware.py +204 -0
  36. provide_uterm_server-0.5.0/src/provide/uterm/server/app/posture.py +146 -0
  37. provide_uterm_server-0.5.0/src/provide/uterm/server/app/routes_wiring.py +118 -0
  38. provide_uterm_server-0.5.0/src/provide/uterm/server/app/ws_denial.py +116 -0
  39. provide_uterm_server-0.5.0/src/provide/uterm/server/audit.py +92 -0
  40. provide_uterm_server-0.5.0/src/provide/uterm/server/audit_chain.py +397 -0
  41. provide_uterm_server-0.5.0/src/provide/uterm/server/auth.py +440 -0
  42. provide_uterm_server-0.5.0/src/provide/uterm/server/auth_roles.py +29 -0
  43. provide_uterm_server-0.5.0/src/provide/uterm/server/auth_webhook.py +274 -0
  44. provide_uterm_server-0.5.0/src/provide/uterm/server/authorization.py +438 -0
  45. provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/__init__.py +35 -0
  46. provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/fanout/__init__.py +21 -0
  47. provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/fanout/_collector.py +184 -0
  48. provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/fanout/_controller.py +656 -0
  49. provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/fanout/_divergence.py +51 -0
  50. provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/fanout/_models.py +54 -0
  51. provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/fanout/_routes.py +205 -0
  52. provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/fanout/_store.py +79 -0
  53. provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/frames.py +288 -0
  54. provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/hub/__init__.py +224 -0
  55. provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/hub/approvals.py +192 -0
  56. provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/hub/connection.py +584 -0
  57. provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/hub/connection_hijack.py +166 -0
  58. provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/hub/connections.py +49 -0
  59. provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/hub/core.py +36 -0
  60. provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/hub/core_delegates_connection.py +90 -0
  61. provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/hub/core_delegates_lease.py +104 -0
  62. provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/hub/core_helpers.py +67 -0
  63. provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/hub/core_impl.py +751 -0
  64. provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/hub/core_orchestration.py +305 -0
  65. provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/hub/event_bus.py +515 -0
  66. provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/hub/ext.py +421 -0
  67. provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/hub/lease.py +722 -0
  68. provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/hub/limiter.py +198 -0
  69. provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/hub/polling_service.py +258 -0
  70. provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/hub/presence.py +166 -0
  71. provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/hub/redaction.py +75 -0
  72. provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/hub/redaction_defaults.py +134 -0
  73. provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/hub/registry.py +102 -0
  74. provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/hub/resume.py +293 -0
  75. provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/hub/router.py +11 -0
  76. provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/hub/router_behavioral.py +118 -0
  77. provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/hub/router_broadcast.py +558 -0
  78. provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/hub/router_impl.py +613 -0
  79. provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/hub/router_redaction.py +88 -0
  80. provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/hub/semantics.py +97 -0
  81. provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/hub/snapshot_metrics.py +47 -0
  82. provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/hub/store.py +301 -0
  83. provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/identity.py +47 -0
  84. provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/models.py +249 -0
  85. provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/ratelimit.py +57 -0
  86. provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/rest_helpers.py +123 -0
  87. provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/routes/__init__.py +31 -0
  88. provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/routes/browser_handlers.py +587 -0
  89. provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/routes/rest.py +527 -0
  90. provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/routes/rest_gui.py +272 -0
  91. provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/routes/rest_workerctl.py +81 -0
  92. provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/routes/websockets.py +27 -0
  93. provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/routes/websockets_browser.py +182 -0
  94. provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/routes/websockets_impl.py +475 -0
  95. provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/routes/websockets_worker.py +205 -0
  96. provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/routes/ws_gui_vnc.py +349 -0
  97. provide_uterm_server-0.5.0/src/provide/uterm/server/bridge/worker_link.py +546 -0
  98. provide_uterm_server-0.5.0/src/provide/uterm/server/cli.py +98 -0
  99. provide_uterm_server-0.5.0/src/provide/uterm/server/config.py +75 -0
  100. provide_uterm_server-0.5.0/src/provide/uterm/server/config_schema.py +644 -0
  101. provide_uterm_server-0.5.0/src/provide/uterm/server/config_schema_session.py +133 -0
  102. provide_uterm_server-0.5.0/src/provide/uterm/server/connectors/__init__.py +38 -0
  103. provide_uterm_server-0.5.0/src/provide/uterm/server/connectors/base.py +54 -0
  104. provide_uterm_server-0.5.0/src/provide/uterm/server/connectors/registry.py +60 -0
  105. provide_uterm_server-0.5.0/src/provide/uterm/server/connectors/shell.py +278 -0
  106. provide_uterm_server-0.5.0/src/provide/uterm/server/connectors/ssh.py +299 -0
  107. provide_uterm_server-0.5.0/src/provide/uterm/server/connectors/telnet.py +201 -0
  108. provide_uterm_server-0.5.0/src/provide/uterm/server/connectors/websocket.py +232 -0
  109. provide_uterm_server-0.5.0/src/provide/uterm/server/dev_idp.py +148 -0
  110. provide_uterm_server-0.5.0/src/provide/uterm/server/discovery.py +52 -0
  111. provide_uterm_server-0.5.0/src/provide/uterm/server/egress.py +284 -0
  112. provide_uterm_server-0.5.0/src/provide/uterm/server/frontend/.vite/manifest.json +11 -0
  113. provide_uterm_server-0.5.0/src/provide/uterm/server/frontend/assets/hijack-By88gYiP.css +1 -0
  114. provide_uterm_server-0.5.0/src/provide/uterm/server/frontend/assets/hijack-EOSnykbf.js +1 -0
  115. provide_uterm_server-0.5.0/src/provide/uterm/server/frontend/assets/hijack-u6InuX0q.js +481 -0
  116. provide_uterm_server-0.5.0/src/provide/uterm/server/frontend/assets/hijack_script-BIYHv3dN.js +1 -0
  117. provide_uterm_server-0.5.0/src/provide/uterm/server/frontend/assets/main-D1LRXeuH.css +1 -0
  118. provide_uterm_server-0.5.0/src/provide/uterm/server/frontend/assets/main-zEqPHxNk.js +985 -0
  119. provide_uterm_server-0.5.0/src/provide/uterm/server/frontend/assets/modulepreload-polyfill-P2Xu9kJm.js +1 -0
  120. provide_uterm_server-0.5.0/src/provide/uterm/server/frontend/assets/panels-B8G9U-I_.css +1 -0
  121. provide_uterm_server-0.5.0/src/provide/uterm/server/frontend/assets/panels-Bfu9DoaK.js +1 -0
  122. provide_uterm_server-0.5.0/src/provide/uterm/server/frontend/assets/panels_script-C4XrWEgD.js +1 -0
  123. provide_uterm_server-0.5.0/src/provide/uterm/server/frontend/assets/rfb-NV_fh9Db.js +5 -0
  124. provide_uterm_server-0.5.0/src/provide/uterm/server/frontend/assets/terminal-BAJVEpkf.js +1 -0
  125. provide_uterm_server-0.5.0/src/provide/uterm/server/frontend/assets/terminal-BX3-tGv7.css +1 -0
  126. provide_uterm_server-0.5.0/src/provide/uterm/server/frontend/assets/terminal-DkHy54zN.js +1 -0
  127. provide_uterm_server-0.5.0/src/provide/uterm/server/frontend/assets/terminal-ShPuoZF-.css +1 -0
  128. provide_uterm_server-0.5.0/src/provide/uterm/server/frontend/assets/terminal-element-BYg3GDC2.js +98 -0
  129. provide_uterm_server-0.5.0/src/provide/uterm/server/frontend/assets/terminal-links-wV5GI_Mz.js +2 -0
  130. provide_uterm_server-0.5.0/src/provide/uterm/server/frontend/assets/terminal_script-mD6Xem-Y.js +1 -0
  131. provide_uterm_server-0.5.0/src/provide/uterm/server/frontend/assets/vnc-Dw30jYyv.css +1 -0
  132. provide_uterm_server-0.5.0/src/provide/uterm/server/frontend/assets/vnc-page-BUhHaJtu.js +1 -0
  133. provide_uterm_server-0.5.0/src/provide/uterm/server/frontend/assets/vnc_script-CDy1Xbzb.js +1 -0
  134. provide_uterm_server-0.5.0/src/provide/uterm/server/frontend/hijack.html +56 -0
  135. provide_uterm_server-0.5.0/src/provide/uterm/server/frontend/panels.html +42 -0
  136. provide_uterm_server-0.5.0/src/provide/uterm/server/frontend/terminal.html +23 -0
  137. provide_uterm_server-0.5.0/src/provide/uterm/server/frontend/vanilla-manifest.json +128 -0
  138. provide_uterm_server-0.5.0/src/provide/uterm/server/frontend/vite-manifest.json +11 -0
  139. provide_uterm_server-0.5.0/src/provide/uterm/server/frontend/vnc.html +66 -0
  140. provide_uterm_server-0.5.0/src/provide/uterm/server/graphical_routes.py +388 -0
  141. provide_uterm_server-0.5.0/src/provide/uterm/server/graphical_targets.py +434 -0
  142. provide_uterm_server-0.5.0/src/provide/uterm/server/gui_session.py +147 -0
  143. provide_uterm_server-0.5.0/src/provide/uterm/server/models.py +122 -0
  144. provide_uterm_server-0.5.0/src/provide/uterm/server/pam_integration.py +363 -0
  145. provide_uterm_server-0.5.0/src/provide/uterm/server/pam_tunnel.py +105 -0
  146. provide_uterm_server-0.5.0/src/provide/uterm/server/policy.py +27 -0
  147. provide_uterm_server-0.5.0/src/provide/uterm/server/profiles.py +136 -0
  148. provide_uterm_server-0.5.0/src/provide/uterm/server/recording.py +77 -0
  149. provide_uterm_server-0.5.0/src/provide/uterm/server/registry.py +549 -0
  150. provide_uterm_server-0.5.0/src/provide/uterm/server/routes/__init__.py +13 -0
  151. provide_uterm_server-0.5.0/src/provide/uterm/server/routes/_helpers.py +70 -0
  152. provide_uterm_server-0.5.0/src/provide/uterm/server/routes/api.py +72 -0
  153. provide_uterm_server-0.5.0/src/provide/uterm/server/routes/api_keys.py +139 -0
  154. provide_uterm_server-0.5.0/src/provide/uterm/server/routes/approvals.py +116 -0
  155. provide_uterm_server-0.5.0/src/provide/uterm/server/routes/health.py +157 -0
  156. provide_uterm_server-0.5.0/src/provide/uterm/server/routes/pages.py +251 -0
  157. provide_uterm_server-0.5.0/src/provide/uterm/server/routes/pam_events.py +147 -0
  158. provide_uterm_server-0.5.0/src/provide/uterm/server/routes/profiles.py +220 -0
  159. provide_uterm_server-0.5.0/src/provide/uterm/server/routes/route_defs.py +115 -0
  160. provide_uterm_server-0.5.0/src/provide/uterm/server/routes/sessions.py +542 -0
  161. provide_uterm_server-0.5.0/src/provide/uterm/server/routes/sse.py +112 -0
  162. provide_uterm_server-0.5.0/src/provide/uterm/server/routes/tunnels.py +411 -0
  163. provide_uterm_server-0.5.0/src/provide/uterm/server/routes/webhooks.py +207 -0
  164. provide_uterm_server-0.5.0/src/provide/uterm/server/runtime.py +525 -0
  165. provide_uterm_server-0.5.0/src/provide/uterm/server/runtime_helpers.py +72 -0
  166. provide_uterm_server-0.5.0/src/provide/uterm/server/security.py +82 -0
  167. provide_uterm_server-0.5.0/src/provide/uterm/server/tracing.py +63 -0
  168. provide_uterm_server-0.5.0/src/provide/uterm/server/tunnel_invites.py +118 -0
  169. provide_uterm_server-0.5.0/src/provide/uterm/server/ui.py +381 -0
  170. provide_uterm_server-0.5.0/src/provide/uterm/server/vnc_upstream.py +253 -0
  171. provide_uterm_server-0.5.0/src/provide/uterm/server/webhook_signing.py +58 -0
  172. provide_uterm_server-0.5.0/src/provide/uterm/server/webhooks.py +641 -0
  173. provide_uterm_server-0.5.0/src/provide/uterm/tunnel/__init__.py +35 -0
  174. provide_uterm_server-0.5.0/src/provide/uterm/tunnel/client.py +155 -0
  175. provide_uterm_server-0.5.0/src/provide/uterm/tunnel/fastapi_routes.py +208 -0
  176. provide_uterm_server-0.5.0/src/provide/uterm/tunnel/http_proxy.py +70 -0
  177. provide_uterm_server-0.5.0/src/provide/uterm/tunnel/intercept.py +154 -0
  178. provide_uterm_server-0.5.0/src/provide/uterm/tunnel/protocol.py +81 -0
  179. provide_uterm_server-0.5.0/src/provide/uterm/tunnel/pty_capture.py +165 -0
  180. provide_uterm_server-0.5.0/src/provide/uterm/tunnel/token_hash.py +50 -0
  181. provide_uterm_server-0.5.0/src/provide/uterm/tunnel/types.py +73 -0
  182. provide_uterm_server-0.5.0/src/provide_uterm_server.egg-info/PKG-INFO +61 -0
  183. provide_uterm_server-0.5.0/src/provide_uterm_server.egg-info/SOURCES.txt +192 -0
  184. provide_uterm_server-0.5.0/src/provide_uterm_server.egg-info/dependency_links.txt +1 -0
  185. provide_uterm_server-0.5.0/src/provide_uterm_server.egg-info/entry_points.txt +2 -0
  186. provide_uterm_server-0.5.0/src/provide_uterm_server.egg-info/requires.txt +62 -0
  187. provide_uterm_server-0.5.0/src/provide_uterm_server.egg-info/top_level.txt +1 -0
  188. provide_uterm_server-0.5.0/tests/test_config_schema.py +95 -0
  189. provide_uterm_server-0.5.0/tests/test_csharp_mutation_gate_budget.py +113 -0
  190. provide_uterm_server-0.5.0/tests/test_go_mutation_gate_budget.py +155 -0
  191. provide_uterm_server-0.5.0/tests/test_hostile_profile_availability.py +219 -0
  192. provide_uterm_server-0.5.0/tests/test_mutation_gate_allowlist.py +531 -0
  193. provide_uterm_server-0.5.0/tests/test_namespace_ownership.py +28 -0
  194. 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 }
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+