soothe-client-python 1.0.14__tar.gz → 1.0.15__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 (34) hide show
  1. {soothe_client_python-1.0.14 → soothe_client_python-1.0.15}/PKG-INFO +1 -1
  2. {soothe_client_python-1.0.14 → soothe_client_python-1.0.15}/src/soothe_client/command_client.py +37 -4
  3. {soothe_client_python-1.0.14 → soothe_client_python-1.0.15}/.gitignore +0 -0
  4. {soothe_client_python-1.0.14 → soothe_client_python-1.0.15}/LICENSE +0 -0
  5. {soothe_client_python-1.0.14 → soothe_client_python-1.0.15}/README.md +0 -0
  6. {soothe_client_python-1.0.14 → soothe_client_python-1.0.15}/pyproject.toml +0 -0
  7. {soothe_client_python-1.0.14 → soothe_client_python-1.0.15}/src/soothe_client/__init__.py +0 -0
  8. {soothe_client_python-1.0.14 → soothe_client_python-1.0.15}/src/soothe_client/appkit/__init__.py +0 -0
  9. {soothe_client_python-1.0.14 → soothe_client_python-1.0.15}/src/soothe_client/appkit/attachments.py +0 -0
  10. {soothe_client_python-1.0.14 → soothe_client_python-1.0.15}/src/soothe_client/appkit/broadcaster.py +0 -0
  11. {soothe_client_python-1.0.14 → soothe_client_python-1.0.15}/src/soothe_client/appkit/card_projection.py +0 -0
  12. {soothe_client_python-1.0.14 → soothe_client_python-1.0.15}/src/soothe_client/appkit/chunk_filter.py +0 -0
  13. {soothe_client_python-1.0.14 → soothe_client_python-1.0.15}/src/soothe_client/appkit/classifier.py +0 -0
  14. {soothe_client_python-1.0.14 → soothe_client_python-1.0.15}/src/soothe_client/appkit/daemon_session.py +0 -0
  15. {soothe_client_python-1.0.14 → soothe_client_python-1.0.15}/src/soothe_client/appkit/events.py +0 -0
  16. {soothe_client_python-1.0.14 → soothe_client_python-1.0.15}/src/soothe_client/appkit/loop_session_store.py +0 -0
  17. {soothe_client_python-1.0.14 → soothe_client_python-1.0.15}/src/soothe_client/appkit/managed_client.py +0 -0
  18. {soothe_client_python-1.0.14 → soothe_client_python-1.0.15}/src/soothe_client/appkit/observability.py +0 -0
  19. {soothe_client_python-1.0.14 → soothe_client_python-1.0.15}/src/soothe_client/appkit/pool.py +0 -0
  20. {soothe_client_python-1.0.14 → soothe_client_python-1.0.15}/src/soothe_client/appkit/query_gate.py +0 -0
  21. {soothe_client_python-1.0.14 → soothe_client_python-1.0.15}/src/soothe_client/appkit/thinking_step.py +0 -0
  22. {soothe_client_python-1.0.14 → soothe_client_python-1.0.15}/src/soothe_client/appkit/turn.py +0 -0
  23. {soothe_client_python-1.0.14 → soothe_client_python-1.0.15}/src/soothe_client/appkit/turn_boundary.py +0 -0
  24. {soothe_client_python-1.0.14 → soothe_client_python-1.0.15}/src/soothe_client/appkit/turn_runner.py +0 -0
  25. {soothe_client_python-1.0.14 → soothe_client_python-1.0.15}/src/soothe_client/errors.py +0 -0
  26. {soothe_client_python-1.0.14 → soothe_client_python-1.0.15}/src/soothe_client/helpers.py +0 -0
  27. {soothe_client_python-1.0.14 → soothe_client_python-1.0.15}/src/soothe_client/intent_hints.py +0 -0
  28. {soothe_client_python-1.0.14 → soothe_client_python-1.0.15}/src/soothe_client/protocol_params.py +0 -0
  29. {soothe_client_python-1.0.14 → soothe_client_python-1.0.15}/src/soothe_client/py.typed +0 -0
  30. {soothe_client_python-1.0.14 → soothe_client_python-1.0.15}/src/soothe_client/schemas.py +0 -0
  31. {soothe_client_python-1.0.14 → soothe_client_python-1.0.15}/src/soothe_client/session.py +0 -0
  32. {soothe_client_python-1.0.14 → soothe_client_python-1.0.15}/src/soothe_client/stream_terminal.py +0 -0
  33. {soothe_client_python-1.0.14 → soothe_client_python-1.0.15}/src/soothe_client/turn_boundary.py +0 -0
  34. {soothe_client_python-1.0.14 → soothe_client_python-1.0.15}/src/soothe_client/websocket.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: soothe-client-python
3
- Version: 1.0.14
3
+ Version: 1.0.15
4
4
  Summary: WebSocket client + appkit for soothe-daemon (Python)
5
5
  Project-URL: Homepage, https://github.com/mirasoth/soothe-client-python
6
6
  Project-URL: Documentation, https://soothe.readthedocs.io
@@ -27,6 +27,12 @@ logger = logging.getLogger(__name__)
27
27
  _TRANSITIONAL_DAEMON_READY_STATES = frozenset({"starting", "warming"})
28
28
  _DAEMON_READY_POLL_INTERVAL_S = 0.05
29
29
 
30
+ # Align with soothe_daemon.config.models.WebSocketConfig.max_frame_size (default 10 MiB)
31
+ # and WebSocketClient._DEFAULT_MAX_FRAME_SIZE. The websockets library defaults
32
+ # max_size to 1 MiB, which closes the connection (1009) when the daemon replies
33
+ # with larger JSON payloads (e.g. autopilot goal forests) to command RPCs.
34
+ _DEFAULT_MAX_FRAME_SIZE = 10 * 1024 * 1024
35
+
30
36
  try:
31
37
  from soothe_sdk import __version__ as _client_version
32
38
  except Exception: # pragma: no cover
@@ -151,11 +157,21 @@ class AsyncCommandClient:
151
157
  Args:
152
158
  ws_url: Daemon WebSocket URL (e.g. ``ws://127.0.0.1:8765``).
153
159
  timeout: Per-command timeout in seconds.
160
+ max_frame_size: Maximum incoming WebSocket message size in bytes. Should be
161
+ at least the daemon's ``transport.websocket.max_frame_size`` when that
162
+ is customized; defaults to 10 MiB to match the daemon default.
154
163
  """
155
164
 
156
- def __init__(self, ws_url: str, *, timeout: float = 30.0) -> None:
165
+ def __init__(
166
+ self,
167
+ ws_url: str,
168
+ *,
169
+ timeout: float = 30.0,
170
+ max_frame_size: int = _DEFAULT_MAX_FRAME_SIZE,
171
+ ) -> None:
157
172
  self._ws_url = ws_url.rstrip("/")
158
173
  self._timeout = timeout
174
+ self._max_frame_size = max_frame_size
159
175
 
160
176
  async def _send_command(
161
177
  self,
@@ -197,7 +213,11 @@ class AsyncCommandClient:
197
213
  )
198
214
 
199
215
  try:
200
- async with websockets.connect(self._ws_url, open_timeout=cmd_timeout) as ws:
216
+ async with websockets.connect(
217
+ self._ws_url,
218
+ open_timeout=cmd_timeout,
219
+ max_size=self._max_frame_size,
220
+ ) as ws:
201
221
  await _perform_handshake(ws, timeout=cmd_timeout)
202
222
 
203
223
  # Send the protocol-1 request envelope.
@@ -411,10 +431,23 @@ class CommandClient:
411
431
  Args:
412
432
  ws_url: Daemon WebSocket URL.
413
433
  timeout: Per-command timeout in seconds.
434
+ max_frame_size: Maximum incoming WebSocket message size in bytes. Should be
435
+ at least the daemon's ``transport.websocket.max_frame_size`` when that
436
+ is customized; defaults to 10 MiB to match the daemon default.
414
437
  """
415
438
 
416
- def __init__(self, ws_url: str, *, timeout: float = 30.0) -> None:
417
- self._client = AsyncCommandClient(ws_url, timeout=timeout)
439
+ def __init__(
440
+ self,
441
+ ws_url: str,
442
+ *,
443
+ timeout: float = 30.0,
444
+ max_frame_size: int = _DEFAULT_MAX_FRAME_SIZE,
445
+ ) -> None:
446
+ self._client = AsyncCommandClient(
447
+ ws_url,
448
+ timeout=timeout,
449
+ max_frame_size=max_frame_size,
450
+ )
418
451
 
419
452
  def _run_async(self, coro: Any) -> Any:
420
453
  """Run an async coroutine from sync code."""