hypercli-sdk 0.9.5__tar.gz → 0.9.7__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.
- {hypercli_sdk-0.9.5 → hypercli_sdk-0.9.7}/PKG-INFO +1 -1
- {hypercli_sdk-0.9.5 → hypercli_sdk-0.9.7}/hypercli/__init__.py +1 -1
- {hypercli_sdk-0.9.5 → hypercli_sdk-0.9.7}/hypercli/sessions.py +2 -0
- {hypercli_sdk-0.9.5 → hypercli_sdk-0.9.7}/pyproject.toml +1 -1
- {hypercli_sdk-0.9.5 → hypercli_sdk-0.9.7}/tests/test_sessions.py +7 -2
- {hypercli_sdk-0.9.5 → hypercli_sdk-0.9.7}/.gitignore +0 -0
- {hypercli_sdk-0.9.5 → hypercli_sdk-0.9.7}/README.md +0 -0
- {hypercli_sdk-0.9.5 → hypercli_sdk-0.9.7}/hypercli/acp.py +0 -0
- {hypercli_sdk-0.9.5 → hypercli_sdk-0.9.7}/hypercli/agent.py +0 -0
- {hypercli_sdk-0.9.5 → hypercli_sdk-0.9.7}/hypercli/agents.py +0 -0
- {hypercli_sdk-0.9.5 → hypercli_sdk-0.9.7}/hypercli/billing.py +0 -0
- {hypercli_sdk-0.9.5 → hypercli_sdk-0.9.7}/hypercli/chat_integrations.py +0 -0
- {hypercli_sdk-0.9.5 → hypercli_sdk-0.9.7}/hypercli/client.py +0 -0
- {hypercli_sdk-0.9.5 → hypercli_sdk-0.9.7}/hypercli/config.py +0 -0
- {hypercli_sdk-0.9.5 → hypercli_sdk-0.9.7}/hypercli/files.py +0 -0
- {hypercli_sdk-0.9.5 → hypercli_sdk-0.9.7}/hypercli/http.py +0 -0
- {hypercli_sdk-0.9.5 → hypercli_sdk-0.9.7}/hypercli/instances.py +0 -0
- {hypercli_sdk-0.9.5 → hypercli_sdk-0.9.7}/hypercli/job/__init__.py +0 -0
- {hypercli_sdk-0.9.5 → hypercli_sdk-0.9.7}/hypercli/job/base.py +0 -0
- {hypercli_sdk-0.9.5 → hypercli_sdk-0.9.7}/hypercli/job/comfyui.py +0 -0
- {hypercli_sdk-0.9.5 → hypercli_sdk-0.9.7}/hypercli/job/gradio.py +0 -0
- {hypercli_sdk-0.9.5 → hypercli_sdk-0.9.7}/hypercli/jobs.py +0 -0
- {hypercli_sdk-0.9.5 → hypercli_sdk-0.9.7}/hypercli/keys.py +0 -0
- {hypercli_sdk-0.9.5 → hypercli_sdk-0.9.7}/hypercli/logs.py +0 -0
- {hypercli_sdk-0.9.5 → hypercli_sdk-0.9.7}/hypercli/mcp.py +0 -0
- {hypercli_sdk-0.9.5 → hypercli_sdk-0.9.7}/hypercli/models.py +0 -0
- {hypercli_sdk-0.9.5 → hypercli_sdk-0.9.7}/hypercli/renders.py +0 -0
- {hypercli_sdk-0.9.5 → hypercli_sdk-0.9.7}/hypercli/routines.py +0 -0
- {hypercli_sdk-0.9.5 → hypercli_sdk-0.9.7}/hypercli/runners.py +0 -0
- {hypercli_sdk-0.9.5 → hypercli_sdk-0.9.7}/hypercli/shell.py +0 -0
- {hypercli_sdk-0.9.5 → hypercli_sdk-0.9.7}/hypercli/user.py +0 -0
- {hypercli_sdk-0.9.5 → hypercli_sdk-0.9.7}/hypercli/voice.py +0 -0
- {hypercli_sdk-0.9.5 → hypercli_sdk-0.9.7}/hypercli/voice_stream.py +0 -0
- {hypercli_sdk-0.9.5 → hypercli_sdk-0.9.7}/hypercli/voice_transcription.py +0 -0
- {hypercli_sdk-0.9.5 → hypercli_sdk-0.9.7}/hypercli/workspaces.py +0 -0
- {hypercli_sdk-0.9.5 → hypercli_sdk-0.9.7}/hypercli/x402.py +0 -0
- {hypercli_sdk-0.9.5 → hypercli_sdk-0.9.7}/tests/integration/conftest.py +0 -0
- {hypercli_sdk-0.9.5 → hypercli_sdk-0.9.7}/tests/integration/test_agents.py +0 -0
- {hypercli_sdk-0.9.5 → hypercli_sdk-0.9.7}/tests/integration/test_auth.py +0 -0
- {hypercli_sdk-0.9.5 → hypercli_sdk-0.9.7}/tests/integration/test_billing.py +0 -0
- {hypercli_sdk-0.9.5 → hypercli_sdk-0.9.7}/tests/integration/test_instances.py +0 -0
- {hypercli_sdk-0.9.5 → hypercli_sdk-0.9.7}/tests/integration/test_jobs_dryrun.py +0 -0
- {hypercli_sdk-0.9.5 → hypercli_sdk-0.9.7}/tests/integration/test_keys.py +0 -0
- {hypercli_sdk-0.9.5 → hypercli_sdk-0.9.7}/tests/integration/test_renders.py +0 -0
- {hypercli_sdk-0.9.5 → hypercli_sdk-0.9.7}/tests/test_acp.py +0 -0
- {hypercli_sdk-0.9.5 → hypercli_sdk-0.9.7}/tests/test_agent_files_source.py +0 -0
- {hypercli_sdk-0.9.5 → hypercli_sdk-0.9.7}/tests/test_agent_lifecycle.py +0 -0
- {hypercli_sdk-0.9.5 → hypercli_sdk-0.9.7}/tests/test_agents.py +0 -0
- {hypercli_sdk-0.9.5 → hypercli_sdk-0.9.7}/tests/test_apply_params.py +0 -0
- {hypercli_sdk-0.9.5 → hypercli_sdk-0.9.7}/tests/test_bootstrap_agents_e2e_user.py +0 -0
- {hypercli_sdk-0.9.5 → hypercli_sdk-0.9.7}/tests/test_bootstrap_console_test_key.py +0 -0
- {hypercli_sdk-0.9.5 → hypercli_sdk-0.9.7}/tests/test_bootstrap_dev_test_keys.py +0 -0
- {hypercli_sdk-0.9.5 → hypercli_sdk-0.9.7}/tests/test_chat_integrations.py +0 -0
- {hypercli_sdk-0.9.5 → hypercli_sdk-0.9.7}/tests/test_claw.py +0 -0
- {hypercli_sdk-0.9.5 → hypercli_sdk-0.9.7}/tests/test_coding_agents.py +0 -0
- {hypercli_sdk-0.9.5 → hypercli_sdk-0.9.7}/tests/test_config.py +0 -0
- {hypercli_sdk-0.9.5 → hypercli_sdk-0.9.7}/tests/test_exec_shell_dryrun.py +0 -0
- {hypercli_sdk-0.9.5 → hypercli_sdk-0.9.7}/tests/test_file_transport.py +0 -0
- {hypercli_sdk-0.9.5 → hypercli_sdk-0.9.7}/tests/test_graph_to_api.py +0 -0
- {hypercli_sdk-0.9.5 → hypercli_sdk-0.9.7}/tests/test_http.py +0 -0
- {hypercli_sdk-0.9.5 → hypercli_sdk-0.9.7}/tests/test_jobs.py +0 -0
- {hypercli_sdk-0.9.5 → hypercli_sdk-0.9.7}/tests/test_keys.py +0 -0
- {hypercli_sdk-0.9.5 → hypercli_sdk-0.9.7}/tests/test_models.py +0 -0
- {hypercli_sdk-0.9.5 → hypercli_sdk-0.9.7}/tests/test_parity_audit.py +0 -0
- {hypercli_sdk-0.9.5 → hypercli_sdk-0.9.7}/tests/test_public_surface.py +0 -0
- {hypercli_sdk-0.9.5 → hypercli_sdk-0.9.7}/tests/test_renders_subscription.py +0 -0
- {hypercli_sdk-0.9.5 → hypercli_sdk-0.9.7}/tests/test_repository_integrity.py +0 -0
- {hypercli_sdk-0.9.5 → hypercli_sdk-0.9.7}/tests/test_routines.py +0 -0
- {hypercli_sdk-0.9.5 → hypercli_sdk-0.9.7}/tests/test_runner_control_url.py +0 -0
- {hypercli_sdk-0.9.5 → hypercli_sdk-0.9.7}/tests/test_runner_placement.py +0 -0
- {hypercli_sdk-0.9.5 → hypercli_sdk-0.9.7}/tests/test_runners.py +0 -0
- {hypercli_sdk-0.9.5 → hypercli_sdk-0.9.7}/tests/test_status.py +0 -0
- {hypercli_sdk-0.9.5 → hypercli_sdk-0.9.7}/tests/test_voice.py +0 -0
- {hypercli_sdk-0.9.5 → hypercli_sdk-0.9.7}/tests/test_voice_stream.py +0 -0
- {hypercli_sdk-0.9.5 → hypercli_sdk-0.9.7}/tests/test_voice_transcription.py +0 -0
- {hypercli_sdk-0.9.5 → hypercli_sdk-0.9.7}/tests/test_workspaces.py +0 -0
|
@@ -19,6 +19,7 @@ class SessionRecord:
|
|
|
19
19
|
head_seq: int | None = None
|
|
20
20
|
receipts: list[dict[str, Any]] = field(default_factory=list)
|
|
21
21
|
agent_state: str | None = None # computed per request ("live"|"archived"|"deleted"); None on old servers
|
|
22
|
+
external_url: str | None = None # opaque external reference, independent of source
|
|
22
23
|
|
|
23
24
|
@classmethod
|
|
24
25
|
def from_dict(cls, data: dict[str, Any]) -> "SessionRecord":
|
|
@@ -26,6 +27,7 @@ class SessionRecord:
|
|
|
26
27
|
return cls(
|
|
27
28
|
id=str(data["id"]),
|
|
28
29
|
source=data.get("source") if isinstance(data.get("source"), str) else None,
|
|
30
|
+
external_url=data.get("external_url"),
|
|
29
31
|
summary_text=data.get("summary_text"),
|
|
30
32
|
summary_keywords=list(data.get("summary_keywords") or []),
|
|
31
33
|
created_at=data.get("created_at"),
|
|
@@ -67,8 +67,12 @@ SESSION_ROW = {
|
|
|
67
67
|
|
|
68
68
|
|
|
69
69
|
@pytest.mark.parametrize("source", [None, "slack", "future-client"])
|
|
70
|
-
|
|
71
|
-
|
|
70
|
+
@pytest.mark.parametrize("external_fields", [
|
|
71
|
+
{"external_url": " opaque:Thread/%2f?x=A+B#片 "},
|
|
72
|
+
{"external_url": ""}, {"external_url": None}, {},
|
|
73
|
+
])
|
|
74
|
+
def test_detail_http_contract_and_list_consistency(monkeypatch, source, external_fields):
|
|
75
|
+
row = {**SESSION_ROW, "source": source, "agentState": "live", **external_fields}
|
|
72
76
|
requests = []
|
|
73
77
|
|
|
74
78
|
def send(self, request, **kwargs):
|
|
@@ -85,6 +89,7 @@ def test_detail_http_contract_and_list_consistency(monkeypatch, source):
|
|
|
85
89
|
summary_keywords=row["summary_keywords"], created_at=row["created_at"],
|
|
86
90
|
updated_at=row["updated_at"], participants=row["participants"],
|
|
87
91
|
agent_state="live",
|
|
92
|
+
external_url=external_fields.get("external_url"),
|
|
88
93
|
)
|
|
89
94
|
assert len(requests) == 1
|
|
90
95
|
request = requests[0]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|