soothe-client-python 1.0.18__tar.gz → 1.0.20__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.18 → soothe_client_python-1.0.20}/PKG-INFO +1 -1
  2. {soothe_client_python-1.0.18 → soothe_client_python-1.0.20}/src/soothe_client/appkit/daemon_session.py +18 -0
  3. {soothe_client_python-1.0.18 → soothe_client_python-1.0.20}/src/soothe_client/protocol_params.py +0 -24
  4. {soothe_client_python-1.0.18 → soothe_client_python-1.0.20}/src/soothe_client/websocket.py +0 -27
  5. {soothe_client_python-1.0.18 → soothe_client_python-1.0.20}/.gitignore +0 -0
  6. {soothe_client_python-1.0.18 → soothe_client_python-1.0.20}/LICENSE +0 -0
  7. {soothe_client_python-1.0.18 → soothe_client_python-1.0.20}/README.md +0 -0
  8. {soothe_client_python-1.0.18 → soothe_client_python-1.0.20}/pyproject.toml +0 -0
  9. {soothe_client_python-1.0.18 → soothe_client_python-1.0.20}/src/soothe_client/__init__.py +0 -0
  10. {soothe_client_python-1.0.18 → soothe_client_python-1.0.20}/src/soothe_client/appkit/__init__.py +0 -0
  11. {soothe_client_python-1.0.18 → soothe_client_python-1.0.20}/src/soothe_client/appkit/attachments.py +0 -0
  12. {soothe_client_python-1.0.18 → soothe_client_python-1.0.20}/src/soothe_client/appkit/broadcaster.py +0 -0
  13. {soothe_client_python-1.0.18 → soothe_client_python-1.0.20}/src/soothe_client/appkit/card_projection.py +0 -0
  14. {soothe_client_python-1.0.18 → soothe_client_python-1.0.20}/src/soothe_client/appkit/chunk_filter.py +0 -0
  15. {soothe_client_python-1.0.18 → soothe_client_python-1.0.20}/src/soothe_client/appkit/classifier.py +0 -0
  16. {soothe_client_python-1.0.18 → soothe_client_python-1.0.20}/src/soothe_client/appkit/events.py +0 -0
  17. {soothe_client_python-1.0.18 → soothe_client_python-1.0.20}/src/soothe_client/appkit/loop_session_store.py +0 -0
  18. {soothe_client_python-1.0.18 → soothe_client_python-1.0.20}/src/soothe_client/appkit/managed_client.py +0 -0
  19. {soothe_client_python-1.0.18 → soothe_client_python-1.0.20}/src/soothe_client/appkit/observability.py +0 -0
  20. {soothe_client_python-1.0.18 → soothe_client_python-1.0.20}/src/soothe_client/appkit/pool.py +0 -0
  21. {soothe_client_python-1.0.18 → soothe_client_python-1.0.20}/src/soothe_client/appkit/query_gate.py +0 -0
  22. {soothe_client_python-1.0.18 → soothe_client_python-1.0.20}/src/soothe_client/appkit/thinking_step.py +0 -0
  23. {soothe_client_python-1.0.18 → soothe_client_python-1.0.20}/src/soothe_client/appkit/turn.py +0 -0
  24. {soothe_client_python-1.0.18 → soothe_client_python-1.0.20}/src/soothe_client/appkit/turn_boundary.py +0 -0
  25. {soothe_client_python-1.0.18 → soothe_client_python-1.0.20}/src/soothe_client/appkit/turn_runner.py +0 -0
  26. {soothe_client_python-1.0.18 → soothe_client_python-1.0.20}/src/soothe_client/command_client.py +0 -0
  27. {soothe_client_python-1.0.18 → soothe_client_python-1.0.20}/src/soothe_client/errors.py +0 -0
  28. {soothe_client_python-1.0.18 → soothe_client_python-1.0.20}/src/soothe_client/helpers.py +0 -0
  29. {soothe_client_python-1.0.18 → soothe_client_python-1.0.20}/src/soothe_client/intent_hints.py +0 -0
  30. {soothe_client_python-1.0.18 → soothe_client_python-1.0.20}/src/soothe_client/py.typed +0 -0
  31. {soothe_client_python-1.0.18 → soothe_client_python-1.0.20}/src/soothe_client/schemas.py +0 -0
  32. {soothe_client_python-1.0.18 → soothe_client_python-1.0.20}/src/soothe_client/session.py +0 -0
  33. {soothe_client_python-1.0.18 → soothe_client_python-1.0.20}/src/soothe_client/stream_terminal.py +0 -0
  34. {soothe_client_python-1.0.18 → soothe_client_python-1.0.20}/src/soothe_client/turn_boundary.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: soothe-client-python
3
- Version: 1.0.18
3
+ Version: 1.0.20
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
@@ -764,6 +764,24 @@ class DaemonSession:
764
764
  interaction_mode=interaction_mode,
765
765
  )
766
766
 
767
+ async def set_clarification_mode(self, mode: str) -> bool:
768
+ """Hot-swap the clarification mode on the running goal (RFC-622).
769
+
770
+ Sends ``loop_set_clarification_mode`` on the RPC socket. Returns
771
+ ``True`` when the swap landed on a live goal; ``False`` when no goal
772
+ is currently running (retry on the next turn).
773
+ """
774
+ if not self._loop_id:
775
+ return False
776
+ async with self._rpc_lock:
777
+ await self._ensure_rpc_connected()
778
+ result = await self._rpc_client.request(
779
+ "loop_set_clarification_mode",
780
+ {"loop_id": self._loop_id, "mode": mode},
781
+ timeout=5.0,
782
+ )
783
+ return bool(result.get("applied", False))
784
+
767
785
  async def _ensure_rpc_connected(self) -> None:
768
786
  if self._rpc_connected:
769
787
  return
@@ -13,8 +13,6 @@ __all__ = [
13
13
  # Loop RPC params
14
14
  "LoopGetParams",
15
15
  "LoopListParams",
16
- "LoopTreeParams",
17
- "LoopPruneParams",
18
16
  "LoopDeleteParams",
19
17
  "LoopNewParams",
20
18
  "LoopReattachParams",
@@ -120,28 +118,6 @@ class LoopListParams(ParamsBase):
120
118
  limit: int | None = Field(default=None, ge=1, description="Maximum results")
121
119
 
122
120
 
123
- class LoopTreeParams(ParamsBase):
124
- """Params for ``method=loop_tree``.
125
-
126
- Attributes:
127
- loop_id: Loop identifier (required).
128
- """
129
-
130
- loop_id: str = Field(..., min_length=1, description="Loop identifier")
131
-
132
-
133
- class LoopPruneParams(ParamsBase):
134
- """Params for ``method=loop_prune``.
135
-
136
- Attributes:
137
- loop_id: Loop identifier (required).
138
- keep_latest: Number of recent branches to keep (default 1).
139
- """
140
-
141
- loop_id: str = Field(..., min_length=1)
142
- keep_latest: int = Field(default=1, ge=1)
143
-
144
-
145
121
  class LoopDeleteParams(ParamsBase):
146
122
  """Params for ``method=loop_delete``.
147
123
 
@@ -1123,33 +1123,6 @@ class WebSocketClient:
1123
1123
  params["as_node"] = as_node
1124
1124
  return await self.request("loop_state_update", params, timeout=timeout)
1125
1125
 
1126
- async def loop_tree(
1127
- self,
1128
- loop_id: str,
1129
- *,
1130
- timeout: float = 15.0,
1131
- ) -> dict[str, Any]:
1132
- """Fetch the loop checkpoint tree (``loop_tree``)."""
1133
- return await self.request(
1134
- "loop_tree",
1135
- {"loop_id": loop_id},
1136
- timeout=timeout,
1137
- )
1138
-
1139
- async def loop_prune(
1140
- self,
1141
- loop_id: str,
1142
- *,
1143
- keep_latest: int = 1,
1144
- timeout: float = 15.0,
1145
- ) -> dict[str, Any]:
1146
- """Prune old checkpoints from a loop (``loop_prune``)."""
1147
- return await self.request(
1148
- "loop_prune",
1149
- {"loop_id": loop_id, "keep_latest": keep_latest},
1150
- timeout=timeout,
1151
- )
1152
-
1153
1126
  async def loop_delete(self, loop_id: str, *, timeout: float = 15.0) -> dict[str, Any]:
1154
1127
  """Delete a loop and its checkpoints (``loop_delete``)."""
1155
1128
  return await self.request(