hypercli-sdk 0.9.3__tar.gz → 0.9.6__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.3 → hypercli_sdk-0.9.6}/PKG-INFO +1 -1
- {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/hypercli/__init__.py +1 -1
- {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/hypercli/agents.py +3 -0
- {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/hypercli/sessions.py +2 -0
- {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/pyproject.toml +1 -1
- {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/test_agents.py +6 -0
- {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/test_sessions.py +7 -2
- {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/.gitignore +0 -0
- {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/README.md +0 -0
- {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/hypercli/acp.py +0 -0
- {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/hypercli/agent.py +0 -0
- {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/hypercli/billing.py +0 -0
- {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/hypercli/chat_integrations.py +0 -0
- {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/hypercli/client.py +0 -0
- {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/hypercli/config.py +0 -0
- {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/hypercli/files.py +0 -0
- {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/hypercli/http.py +0 -0
- {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/hypercli/instances.py +0 -0
- {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/hypercli/job/__init__.py +0 -0
- {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/hypercli/job/base.py +0 -0
- {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/hypercli/job/comfyui.py +0 -0
- {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/hypercli/job/gradio.py +0 -0
- {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/hypercli/jobs.py +0 -0
- {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/hypercli/keys.py +0 -0
- {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/hypercli/logs.py +0 -0
- {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/hypercli/mcp.py +0 -0
- {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/hypercli/models.py +0 -0
- {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/hypercli/renders.py +0 -0
- {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/hypercli/routines.py +0 -0
- {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/hypercli/runners.py +0 -0
- {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/hypercli/shell.py +0 -0
- {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/hypercli/user.py +0 -0
- {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/hypercli/voice.py +0 -0
- {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/hypercli/voice_stream.py +0 -0
- {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/hypercli/voice_transcription.py +0 -0
- {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/hypercli/workspaces.py +0 -0
- {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/hypercli/x402.py +0 -0
- {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/integration/conftest.py +0 -0
- {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/integration/test_agents.py +0 -0
- {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/integration/test_auth.py +0 -0
- {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/integration/test_billing.py +0 -0
- {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/integration/test_instances.py +0 -0
- {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/integration/test_jobs_dryrun.py +0 -0
- {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/integration/test_keys.py +0 -0
- {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/integration/test_renders.py +0 -0
- {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/test_acp.py +0 -0
- {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/test_agent_files_source.py +0 -0
- {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/test_agent_lifecycle.py +0 -0
- {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/test_apply_params.py +0 -0
- {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/test_bootstrap_agents_e2e_user.py +0 -0
- {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/test_bootstrap_console_test_key.py +0 -0
- {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/test_bootstrap_dev_test_keys.py +0 -0
- {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/test_chat_integrations.py +0 -0
- {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/test_claw.py +0 -0
- {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/test_coding_agents.py +0 -0
- {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/test_config.py +0 -0
- {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/test_exec_shell_dryrun.py +0 -0
- {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/test_file_transport.py +0 -0
- {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/test_graph_to_api.py +0 -0
- {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/test_http.py +0 -0
- {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/test_jobs.py +0 -0
- {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/test_keys.py +0 -0
- {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/test_models.py +0 -0
- {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/test_parity_audit.py +0 -0
- {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/test_public_surface.py +0 -0
- {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/test_renders_subscription.py +0 -0
- {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/test_repository_integrity.py +0 -0
- {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/test_routines.py +0 -0
- {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/test_runner_control_url.py +0 -0
- {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/test_runner_placement.py +0 -0
- {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/test_runners.py +0 -0
- {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/test_status.py +0 -0
- {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/test_voice.py +0 -0
- {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/test_voice_stream.py +0 -0
- {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/test_voice_transcription.py +0 -0
- {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/test_workspaces.py +0 -0
|
@@ -1015,6 +1015,7 @@ def _agent_kwargs_from_dict(data: dict) -> dict[str, Any]:
|
|
|
1015
1015
|
if isinstance(data.get("display_identity"), dict)
|
|
1016
1016
|
else None,
|
|
1017
1017
|
"runtime": data.get("runtime"),
|
|
1018
|
+
"hyper_acp_version": data.get("hyper_acp_version"),
|
|
1018
1019
|
"managed": data.get("managed"),
|
|
1019
1020
|
"is_launchable": bool(is_launchable),
|
|
1020
1021
|
"gateway_id": data.get("gateway_id"),
|
|
@@ -1667,6 +1668,8 @@ class Agent:
|
|
|
1667
1668
|
avatar_url: Optional[str] = None
|
|
1668
1669
|
display_identity: Optional[dict] = None
|
|
1669
1670
|
runtime: Optional[str] = None
|
|
1671
|
+
# Observed product hello version, independent of the package release version.
|
|
1672
|
+
hyper_acp_version: int | None = None
|
|
1670
1673
|
managed: Optional[bool] = None
|
|
1671
1674
|
is_launchable: bool = True
|
|
1672
1675
|
gateway_id: Optional[str] = None
|
|
@@ -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"),
|
|
@@ -58,6 +58,12 @@ def test_mcp_launch_selections_use_existing_create_environment():
|
|
|
58
58
|
assert build_additional_mcp_env([]) == {"HYPER_ADDITIONAL_MCP_SERVERS": "[]"}
|
|
59
59
|
|
|
60
60
|
|
|
61
|
+
@pytest.mark.parametrize("observation", [{}, {"hyper_acp_version": None}, {"hyper_acp_version": 0}, {"hyper_acp_version": 1}])
|
|
62
|
+
def test_agent_hydrates_runtime_version_observation(observation):
|
|
63
|
+
agent = Agent.from_dict({"id": "agent", "state": "RUNNING", **observation})
|
|
64
|
+
assert agent.hyper_acp_version == observation.get("hyper_acp_version")
|
|
65
|
+
|
|
66
|
+
|
|
61
67
|
def test_vendored_agents_openapi_matches_canonical_data_plane_routes():
|
|
62
68
|
schema_path = Path(__file__).resolve().parents[2] / "docs" / "agents-openapi.json"
|
|
63
69
|
schema = json.loads(schema_path.read_text())
|
|
@@ -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
|