soothe-client-python 1.0.17__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.
- {soothe_client_python-1.0.17 → soothe_client_python-1.0.20}/PKG-INFO +1 -1
- {soothe_client_python-1.0.17 → soothe_client_python-1.0.20}/src/soothe_client/appkit/daemon_session.py +18 -0
- {soothe_client_python-1.0.17 → soothe_client_python-1.0.20}/src/soothe_client/protocol_params.py +0 -24
- {soothe_client_python-1.0.17 → soothe_client_python-1.0.20}/src/soothe_client/websocket.py +63 -0
- {soothe_client_python-1.0.17 → soothe_client_python-1.0.20}/.gitignore +0 -0
- {soothe_client_python-1.0.17 → soothe_client_python-1.0.20}/LICENSE +0 -0
- {soothe_client_python-1.0.17 → soothe_client_python-1.0.20}/README.md +0 -0
- {soothe_client_python-1.0.17 → soothe_client_python-1.0.20}/pyproject.toml +0 -0
- {soothe_client_python-1.0.17 → soothe_client_python-1.0.20}/src/soothe_client/__init__.py +0 -0
- {soothe_client_python-1.0.17 → soothe_client_python-1.0.20}/src/soothe_client/appkit/__init__.py +0 -0
- {soothe_client_python-1.0.17 → soothe_client_python-1.0.20}/src/soothe_client/appkit/attachments.py +0 -0
- {soothe_client_python-1.0.17 → soothe_client_python-1.0.20}/src/soothe_client/appkit/broadcaster.py +0 -0
- {soothe_client_python-1.0.17 → soothe_client_python-1.0.20}/src/soothe_client/appkit/card_projection.py +0 -0
- {soothe_client_python-1.0.17 → soothe_client_python-1.0.20}/src/soothe_client/appkit/chunk_filter.py +0 -0
- {soothe_client_python-1.0.17 → soothe_client_python-1.0.20}/src/soothe_client/appkit/classifier.py +0 -0
- {soothe_client_python-1.0.17 → soothe_client_python-1.0.20}/src/soothe_client/appkit/events.py +0 -0
- {soothe_client_python-1.0.17 → soothe_client_python-1.0.20}/src/soothe_client/appkit/loop_session_store.py +0 -0
- {soothe_client_python-1.0.17 → soothe_client_python-1.0.20}/src/soothe_client/appkit/managed_client.py +0 -0
- {soothe_client_python-1.0.17 → soothe_client_python-1.0.20}/src/soothe_client/appkit/observability.py +0 -0
- {soothe_client_python-1.0.17 → soothe_client_python-1.0.20}/src/soothe_client/appkit/pool.py +0 -0
- {soothe_client_python-1.0.17 → soothe_client_python-1.0.20}/src/soothe_client/appkit/query_gate.py +0 -0
- {soothe_client_python-1.0.17 → soothe_client_python-1.0.20}/src/soothe_client/appkit/thinking_step.py +0 -0
- {soothe_client_python-1.0.17 → soothe_client_python-1.0.20}/src/soothe_client/appkit/turn.py +0 -0
- {soothe_client_python-1.0.17 → soothe_client_python-1.0.20}/src/soothe_client/appkit/turn_boundary.py +0 -0
- {soothe_client_python-1.0.17 → soothe_client_python-1.0.20}/src/soothe_client/appkit/turn_runner.py +0 -0
- {soothe_client_python-1.0.17 → soothe_client_python-1.0.20}/src/soothe_client/command_client.py +0 -0
- {soothe_client_python-1.0.17 → soothe_client_python-1.0.20}/src/soothe_client/errors.py +0 -0
- {soothe_client_python-1.0.17 → soothe_client_python-1.0.20}/src/soothe_client/helpers.py +0 -0
- {soothe_client_python-1.0.17 → soothe_client_python-1.0.20}/src/soothe_client/intent_hints.py +0 -0
- {soothe_client_python-1.0.17 → soothe_client_python-1.0.20}/src/soothe_client/py.typed +0 -0
- {soothe_client_python-1.0.17 → soothe_client_python-1.0.20}/src/soothe_client/schemas.py +0 -0
- {soothe_client_python-1.0.17 → soothe_client_python-1.0.20}/src/soothe_client/session.py +0 -0
- {soothe_client_python-1.0.17 → soothe_client_python-1.0.20}/src/soothe_client/stream_terminal.py +0 -0
- {soothe_client_python-1.0.17 → 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.
|
|
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
|
{soothe_client_python-1.0.17 → soothe_client_python-1.0.20}/src/soothe_client/protocol_params.py
RENAMED
|
@@ -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,6 +1123,69 @@ 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_delete(self, loop_id: str, *, timeout: float = 15.0) -> dict[str, Any]:
|
|
1127
|
+
"""Delete a loop and its checkpoints (``loop_delete``)."""
|
|
1128
|
+
return await self.request(
|
|
1129
|
+
"loop_delete",
|
|
1130
|
+
{"loop_id": loop_id},
|
|
1131
|
+
timeout=timeout,
|
|
1132
|
+
)
|
|
1133
|
+
|
|
1134
|
+
async def loop_reattach(self, loop_id: str, *, timeout: float = 15.0) -> dict[str, Any]:
|
|
1135
|
+
"""Reattach to an existing loop (``loop_reattach``)."""
|
|
1136
|
+
return await self.request(
|
|
1137
|
+
"loop_reattach",
|
|
1138
|
+
{"loop_id": loop_id},
|
|
1139
|
+
timeout=timeout,
|
|
1140
|
+
)
|
|
1141
|
+
|
|
1142
|
+
async def config_get(
|
|
1143
|
+
self,
|
|
1144
|
+
section: str | None = None,
|
|
1145
|
+
*,
|
|
1146
|
+
timeout: float = 10.0,
|
|
1147
|
+
) -> dict[str, Any]:
|
|
1148
|
+
"""Fetch a daemon config section (``config_get``)."""
|
|
1149
|
+
params: dict[str, Any] = {}
|
|
1150
|
+
if section:
|
|
1151
|
+
params["section"] = section
|
|
1152
|
+
return await self.request("config_get", params, timeout=timeout)
|
|
1153
|
+
|
|
1154
|
+
async def config_reload(self, *, timeout: float = 15.0) -> dict[str, Any]:
|
|
1155
|
+
"""Reload daemon config from disk (``config_reload``)."""
|
|
1156
|
+
return await self.request("config_reload", {}, timeout=timeout)
|
|
1157
|
+
|
|
1158
|
+
async def daemon_shutdown(self, *, timeout: float = 10.0) -> dict[str, Any]:
|
|
1159
|
+
"""Request a graceful daemon shutdown (``daemon_shutdown``)."""
|
|
1160
|
+
return await self.request("daemon_shutdown", {}, timeout=timeout)
|
|
1161
|
+
|
|
1162
|
+
async def authenticate(
|
|
1163
|
+
self,
|
|
1164
|
+
access_key: str,
|
|
1165
|
+
secret_key: str,
|
|
1166
|
+
*,
|
|
1167
|
+
timeout: float = 15.0,
|
|
1168
|
+
) -> dict[str, Any]:
|
|
1169
|
+
"""Submit credentials for daemon-side auth (``auth``)."""
|
|
1170
|
+
return await self.request(
|
|
1171
|
+
"auth",
|
|
1172
|
+
{"access_key": access_key, "secret_key": secret_key},
|
|
1173
|
+
timeout=timeout,
|
|
1174
|
+
)
|
|
1175
|
+
|
|
1176
|
+
async def refresh_auth_token(
|
|
1177
|
+
self,
|
|
1178
|
+
refresh_token: str,
|
|
1179
|
+
*,
|
|
1180
|
+
timeout: float = 15.0,
|
|
1181
|
+
) -> dict[str, Any]:
|
|
1182
|
+
"""Refresh the daemon-side auth token (``auth_refresh``)."""
|
|
1183
|
+
return await self.request(
|
|
1184
|
+
"auth_refresh",
|
|
1185
|
+
{"refresh_token": refresh_token},
|
|
1186
|
+
timeout=timeout,
|
|
1187
|
+
)
|
|
1188
|
+
|
|
1126
1189
|
def _reset_disconnect_signal(self) -> None:
|
|
1127
1190
|
"""Clear the mid-session drop signal (called from ``connect``)."""
|
|
1128
1191
|
self._disconn_event = asyncio.Event()
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{soothe_client_python-1.0.17 → soothe_client_python-1.0.20}/src/soothe_client/appkit/__init__.py
RENAMED
|
File without changes
|
{soothe_client_python-1.0.17 → soothe_client_python-1.0.20}/src/soothe_client/appkit/attachments.py
RENAMED
|
File without changes
|
{soothe_client_python-1.0.17 → soothe_client_python-1.0.20}/src/soothe_client/appkit/broadcaster.py
RENAMED
|
File without changes
|
|
File without changes
|
{soothe_client_python-1.0.17 → soothe_client_python-1.0.20}/src/soothe_client/appkit/chunk_filter.py
RENAMED
|
File without changes
|
{soothe_client_python-1.0.17 → soothe_client_python-1.0.20}/src/soothe_client/appkit/classifier.py
RENAMED
|
File without changes
|
{soothe_client_python-1.0.17 → soothe_client_python-1.0.20}/src/soothe_client/appkit/events.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{soothe_client_python-1.0.17 → soothe_client_python-1.0.20}/src/soothe_client/appkit/pool.py
RENAMED
|
File without changes
|
{soothe_client_python-1.0.17 → soothe_client_python-1.0.20}/src/soothe_client/appkit/query_gate.py
RENAMED
|
File without changes
|
|
File without changes
|
{soothe_client_python-1.0.17 → soothe_client_python-1.0.20}/src/soothe_client/appkit/turn.py
RENAMED
|
File without changes
|
|
File without changes
|
{soothe_client_python-1.0.17 → soothe_client_python-1.0.20}/src/soothe_client/appkit/turn_runner.py
RENAMED
|
File without changes
|
{soothe_client_python-1.0.17 → soothe_client_python-1.0.20}/src/soothe_client/command_client.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{soothe_client_python-1.0.17 → soothe_client_python-1.0.20}/src/soothe_client/intent_hints.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{soothe_client_python-1.0.17 → soothe_client_python-1.0.20}/src/soothe_client/stream_terminal.py
RENAMED
|
File without changes
|
{soothe_client_python-1.0.17 → soothe_client_python-1.0.20}/src/soothe_client/turn_boundary.py
RENAMED
|
File without changes
|