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.
Files changed (76) hide show
  1. {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/PKG-INFO +1 -1
  2. {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/hypercli/__init__.py +1 -1
  3. {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/hypercli/agents.py +3 -0
  4. {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/hypercli/sessions.py +2 -0
  5. {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/pyproject.toml +1 -1
  6. {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/test_agents.py +6 -0
  7. {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/test_sessions.py +7 -2
  8. {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/.gitignore +0 -0
  9. {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/README.md +0 -0
  10. {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/hypercli/acp.py +0 -0
  11. {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/hypercli/agent.py +0 -0
  12. {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/hypercli/billing.py +0 -0
  13. {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/hypercli/chat_integrations.py +0 -0
  14. {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/hypercli/client.py +0 -0
  15. {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/hypercli/config.py +0 -0
  16. {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/hypercli/files.py +0 -0
  17. {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/hypercli/http.py +0 -0
  18. {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/hypercli/instances.py +0 -0
  19. {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/hypercli/job/__init__.py +0 -0
  20. {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/hypercli/job/base.py +0 -0
  21. {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/hypercli/job/comfyui.py +0 -0
  22. {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/hypercli/job/gradio.py +0 -0
  23. {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/hypercli/jobs.py +0 -0
  24. {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/hypercli/keys.py +0 -0
  25. {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/hypercli/logs.py +0 -0
  26. {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/hypercli/mcp.py +0 -0
  27. {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/hypercli/models.py +0 -0
  28. {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/hypercli/renders.py +0 -0
  29. {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/hypercli/routines.py +0 -0
  30. {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/hypercli/runners.py +0 -0
  31. {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/hypercli/shell.py +0 -0
  32. {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/hypercli/user.py +0 -0
  33. {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/hypercli/voice.py +0 -0
  34. {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/hypercli/voice_stream.py +0 -0
  35. {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/hypercli/voice_transcription.py +0 -0
  36. {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/hypercli/workspaces.py +0 -0
  37. {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/hypercli/x402.py +0 -0
  38. {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/integration/conftest.py +0 -0
  39. {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/integration/test_agents.py +0 -0
  40. {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/integration/test_auth.py +0 -0
  41. {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/integration/test_billing.py +0 -0
  42. {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/integration/test_instances.py +0 -0
  43. {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/integration/test_jobs_dryrun.py +0 -0
  44. {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/integration/test_keys.py +0 -0
  45. {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/integration/test_renders.py +0 -0
  46. {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/test_acp.py +0 -0
  47. {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/test_agent_files_source.py +0 -0
  48. {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/test_agent_lifecycle.py +0 -0
  49. {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/test_apply_params.py +0 -0
  50. {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/test_bootstrap_agents_e2e_user.py +0 -0
  51. {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/test_bootstrap_console_test_key.py +0 -0
  52. {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/test_bootstrap_dev_test_keys.py +0 -0
  53. {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/test_chat_integrations.py +0 -0
  54. {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/test_claw.py +0 -0
  55. {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/test_coding_agents.py +0 -0
  56. {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/test_config.py +0 -0
  57. {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/test_exec_shell_dryrun.py +0 -0
  58. {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/test_file_transport.py +0 -0
  59. {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/test_graph_to_api.py +0 -0
  60. {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/test_http.py +0 -0
  61. {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/test_jobs.py +0 -0
  62. {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/test_keys.py +0 -0
  63. {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/test_models.py +0 -0
  64. {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/test_parity_audit.py +0 -0
  65. {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/test_public_surface.py +0 -0
  66. {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/test_renders_subscription.py +0 -0
  67. {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/test_repository_integrity.py +0 -0
  68. {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/test_routines.py +0 -0
  69. {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/test_runner_control_url.py +0 -0
  70. {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/test_runner_placement.py +0 -0
  71. {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/test_runners.py +0 -0
  72. {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/test_status.py +0 -0
  73. {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/test_voice.py +0 -0
  74. {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/test_voice_stream.py +0 -0
  75. {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/test_voice_transcription.py +0 -0
  76. {hypercli_sdk-0.9.3 → hypercli_sdk-0.9.6}/tests/test_workspaces.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: hypercli-sdk
3
- Version: 0.9.3
3
+ Version: 0.9.6
4
4
  Summary: Python SDK for HyperCLI - GPU orchestration and HyperAgent API
5
5
  Project-URL: Homepage, https://hypercli.com
6
6
  Project-URL: Documentation, https://docs.hypercli.com
@@ -157,7 +157,7 @@ from .acp import (
157
157
  AmbiguousDeliveryError,
158
158
  RetryableACPError,
159
159
  )
160
- __version__ = "0.9.3"
160
+ __version__ = "0.9.6"
161
161
  __all__ = [
162
162
  "CHAT_INTEGRATIONS",
163
163
  "build_chat_integration_config",
@@ -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"),
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "hypercli-sdk"
7
- version = "0.9.3"
7
+ version = "0.9.6"
8
8
  description = "Python SDK for HyperCLI - GPU orchestration and HyperAgent API"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -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
- def test_detail_http_contract_and_list_consistency(monkeypatch, source):
71
- row = {**SESSION_ROW, "source": source, "agentState": "live"}
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