rc-openhands-sdk 0.1.0__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.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 RingCentral AI Desk
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,3 @@
1
+ include LICENSE NOTICE README.md PUBLISHING.md UPSTREAM.md
2
+ recursive-include rc_openhands_sdk *.json
3
+ recursive-include tests *.py
@@ -0,0 +1,10 @@
1
+ RcOpenHandsSDK wraps MIT-licensed OpenHands local CLI/SDK packages.
2
+
3
+ Upstream packages:
4
+ - openhands 1.16.0, MIT License, Copyright (c) 2025 All Hands AI
5
+ - openhands-sdk 1.21.0, MIT License, OpenHands software-agent-sdk
6
+
7
+ Excluded from this distribution:
8
+ - OpenHands enterprise/ directory
9
+ - Hosted OpenHands Cloud service code and deployment integrations
10
+ - Any source or artifact whose license cannot be verified as MIT-compatible
@@ -0,0 +1,44 @@
1
+ Metadata-Version: 2.4
2
+ Name: rc-openhands-sdk
3
+ Version: 0.1.0
4
+ Summary: RingCentral MIT-only OpenHands SDK distribution and CLI wrapper
5
+ Author: RingCentral AI Desk
6
+ License-Expression: MIT
7
+ Project-URL: Homepage, https://github.com/OpenHands/software-agent-sdk
8
+ Project-URL: Source, https://github.com/OpenHands/software-agent-sdk/tree/v1.21.0
9
+ Keywords: openhands,sdk,agent,cli,ringcentral
10
+ Classifier: Development Status :: 3 - Alpha
11
+ Classifier: Intended Audience :: Developers
12
+ Classifier: Programming Language :: Python :: 3.12
13
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
14
+ Requires-Python: <3.13,>=3.12
15
+ Description-Content-Type: text/markdown
16
+ License-File: LICENSE
17
+ License-File: NOTICE
18
+ Requires-Dist: openhands==1.16.0
19
+ Requires-Dist: openhands-sdk==1.21.0
20
+ Dynamic: license-file
21
+
22
+ # RcOpenHandsSDK
23
+
24
+ RcOpenHandsSDK is AI Desk's MIT-only OpenHands distribution wrapper.
25
+ It exposes stable RingCentral-owned CLI entry points while delegating to the
26
+ upstream OpenHands CLI and SDK packages pinned below:
27
+
28
+ - `openhands==1.16.0`
29
+ - `openhands-sdk==1.21.0`
30
+
31
+ The package intentionally excludes OpenHands Cloud and `enterprise/` code. It
32
+ only depends on the upstream packages distributed under MIT-compatible terms for
33
+ the local CLI/SDK replacement path used by AI Desk daemon verification.
34
+
35
+ ## Commands
36
+
37
+ ```bash
38
+ rcopenhands --version
39
+ rcopenhands-acp --help
40
+ ```
41
+
42
+ AI Desk still uses the internal `openhands` agent type for compatibility with
43
+ existing task/session payloads, but CLI detection now resolves that type to the
44
+ `rcopenhands` command.
@@ -0,0 +1,28 @@
1
+ # Publishing
2
+
3
+ Build artifacts:
4
+
5
+ ```bash
6
+ uv build
7
+ ```
8
+
9
+ Current local artifacts:
10
+
11
+ - `dist/rc_openhands_sdk-0.1.0-py3-none-any.whl`
12
+ - `dist/rc_openhands_sdk-0.1.0.tar.gz`
13
+
14
+ Install from the local artifact:
15
+
16
+ ```bash
17
+ uv venv --python 3.12 /private/tmp/aidesk-rcopenhands-sdk
18
+ uv pip install --python /private/tmp/aidesk-rcopenhands-sdk/bin/python dist/rc_openhands_sdk-0.1.0-py3-none-any.whl
19
+ ```
20
+
21
+ Remote publishing requires a configured package repository and credentials, for
22
+ example `TWINE_USERNAME`/`TWINE_PASSWORD` or an equivalent Nexus/PyPI token:
23
+
24
+ ```bash
25
+ uv publish --publish-url <repository-url> dist/*
26
+ ```
27
+
28
+ Do not publish a build that includes `enterprise/` or hosted Cloud source.
@@ -0,0 +1,23 @@
1
+ # RcOpenHandsSDK
2
+
3
+ RcOpenHandsSDK is AI Desk's MIT-only OpenHands distribution wrapper.
4
+ It exposes stable RingCentral-owned CLI entry points while delegating to the
5
+ upstream OpenHands CLI and SDK packages pinned below:
6
+
7
+ - `openhands==1.16.0`
8
+ - `openhands-sdk==1.21.0`
9
+
10
+ The package intentionally excludes OpenHands Cloud and `enterprise/` code. It
11
+ only depends on the upstream packages distributed under MIT-compatible terms for
12
+ the local CLI/SDK replacement path used by AI Desk daemon verification.
13
+
14
+ ## Commands
15
+
16
+ ```bash
17
+ rcopenhands --version
18
+ rcopenhands-acp --help
19
+ ```
20
+
21
+ AI Desk still uses the internal `openhands` agent type for compatibility with
22
+ existing task/session payloads, but CLI detection now resolves that type to the
23
+ `rcopenhands` command.
@@ -0,0 +1,36 @@
1
+ # Upstream Boundary
2
+
3
+ RcOpenHandsSDK is the AI Desk distribution boundary for the local OpenHands
4
+ replacement path.
5
+
6
+ ## Included
7
+
8
+ - `openhands==1.16.0`
9
+ - `openhands-sdk==1.21.0`
10
+ - `openhands-tools==1.21.0`
11
+ - `openhands-workspace==1.11.1`
12
+
13
+ The package exposes RingCentral-owned commands:
14
+
15
+ - `rcopenhands`
16
+ - `rcopenhands-acp`
17
+
18
+ AI Desk keeps the internal agent type as `openhands` for API compatibility, but
19
+ daemon detection and execution must resolve that type to the `rcopenhands`
20
+ command.
21
+
22
+ ## Excluded
23
+
24
+ - `enterprise/`
25
+ - hosted OpenHands Cloud flows
26
+ - any source or artifact whose license cannot be verified for the local
27
+ MIT replacement scope
28
+
29
+ ## License Notes
30
+
31
+ RcOpenHandsSDK itself is MIT. The upstream OpenHands CLI package metadata
32
+ declares MIT. The SDK source boundary is tracked against the OpenHands
33
+ `software-agent-sdk` MIT repository and tag used by the pinned package.
34
+
35
+ Third-party transitive dependencies keep their own upstream licenses; they are
36
+ not vendored into RcOpenHandsSDK.
@@ -0,0 +1,41 @@
1
+ [build-system]
2
+ requires = ["setuptools>=68", "wheel"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "rc-openhands-sdk"
7
+ version = "0.1.0"
8
+ description = "RingCentral MIT-only OpenHands SDK distribution and CLI wrapper"
9
+ readme = "README.md"
10
+ requires-python = ">=3.12,<3.13"
11
+ license = "MIT"
12
+ license-files = ["LICENSE", "NOTICE"]
13
+ authors = [
14
+ { name = "RingCentral AI Desk" }
15
+ ]
16
+ keywords = ["openhands", "sdk", "agent", "cli", "ringcentral"]
17
+ classifiers = [
18
+ "Development Status :: 3 - Alpha",
19
+ "Intended Audience :: Developers",
20
+ "Programming Language :: Python :: 3.12",
21
+ "Topic :: Software Development :: Libraries :: Python Modules"
22
+ ]
23
+ dependencies = [
24
+ "openhands==1.16.0",
25
+ "openhands-sdk==1.21.0"
26
+ ]
27
+
28
+ [project.scripts]
29
+ rcopenhands = "rc_openhands_sdk.cli:main"
30
+ rcopenhands-acp = "rc_openhands_sdk.acp:main"
31
+
32
+ [project.urls]
33
+ Homepage = "https://github.com/OpenHands/software-agent-sdk"
34
+ Source = "https://github.com/OpenHands/software-agent-sdk/tree/v1.21.0"
35
+
36
+ [tool.setuptools.packages.find]
37
+ where = ["."]
38
+ include = ["rc_openhands_sdk*"]
39
+
40
+ [tool.setuptools.package-data]
41
+ rc_openhands_sdk = ["MIT_ONLY_MANIFEST.json"]
@@ -0,0 +1,30 @@
1
+ {
2
+ "package": "RcOpenHandsSDK",
3
+ "license": "MIT",
4
+ "version": "0.1.0",
5
+ "upstream": [
6
+ {
7
+ "name": "openhands",
8
+ "version": "1.16.0",
9
+ "license": "MIT",
10
+ "entry_points": [
11
+ "openhands_cli.entrypoint:main",
12
+ "openhands_cli.acp:main"
13
+ ],
14
+ "source": "https://github.com/OpenHands/OpenHands-CLI"
15
+ },
16
+ {
17
+ "name": "openhands-sdk",
18
+ "version": "1.21.0",
19
+ "license": "MIT",
20
+ "source": "https://github.com/OpenHands/software-agent-sdk/tree/v1.21.0"
21
+ }
22
+ ],
23
+ "excluded": [
24
+ "enterprise/",
25
+ "OpenHands Cloud hosted service integrations",
26
+ "Any artifact whose license cannot be verified as MIT-compatible"
27
+ ],
28
+ "ai_desk_agent_type": "openhands",
29
+ "ai_desk_command": "rcopenhands"
30
+ }
@@ -0,0 +1,10 @@
1
+ """RcOpenHandsSDK package metadata."""
2
+
3
+ from importlib.metadata import PackageNotFoundError, version
4
+
5
+ try:
6
+ __version__ = version("rc-openhands-sdk")
7
+ except PackageNotFoundError:
8
+ __version__ = "0.1.0"
9
+
10
+ __all__ = ["__version__"]
@@ -0,0 +1,9 @@
1
+ """RingCentral-owned entry point for the OpenHands ACP bridge."""
2
+
3
+ from __future__ import annotations
4
+
5
+
6
+ def main() -> None:
7
+ from openhands_cli.acp import main as acp_main
8
+
9
+ acp_main()
@@ -0,0 +1,26 @@
1
+ """RingCentral-owned entry point for the MIT-only OpenHands CLI path."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import sys
6
+ from importlib.metadata import PackageNotFoundError, version
7
+
8
+ from rc_openhands_sdk import __version__
9
+
10
+
11
+ def _package_version(package: str) -> str:
12
+ try:
13
+ return version(package)
14
+ except PackageNotFoundError:
15
+ return "unknown"
16
+
17
+
18
+ def main() -> None:
19
+ if len(sys.argv) > 1 and sys.argv[1] in {"--version", "-v"}:
20
+ openhands_version = _package_version("openhands")
21
+ print(f"RcOpenHandsSDK {__version__} (OpenHands CLI {openhands_version})")
22
+ return
23
+
24
+ from openhands_cli.entrypoint import main as openhands_main
25
+
26
+ openhands_main()
@@ -0,0 +1,12 @@
1
+ """Helpers for reading the MIT-only package manifest."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import json
6
+ from importlib import resources
7
+ from typing import Any
8
+
9
+
10
+ def load_manifest() -> dict[str, Any]:
11
+ data = resources.files(__package__).joinpath("MIT_ONLY_MANIFEST.json").read_text(encoding="utf-8")
12
+ return json.loads(data)
@@ -0,0 +1,44 @@
1
+ Metadata-Version: 2.4
2
+ Name: rc-openhands-sdk
3
+ Version: 0.1.0
4
+ Summary: RingCentral MIT-only OpenHands SDK distribution and CLI wrapper
5
+ Author: RingCentral AI Desk
6
+ License-Expression: MIT
7
+ Project-URL: Homepage, https://github.com/OpenHands/software-agent-sdk
8
+ Project-URL: Source, https://github.com/OpenHands/software-agent-sdk/tree/v1.21.0
9
+ Keywords: openhands,sdk,agent,cli,ringcentral
10
+ Classifier: Development Status :: 3 - Alpha
11
+ Classifier: Intended Audience :: Developers
12
+ Classifier: Programming Language :: Python :: 3.12
13
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
14
+ Requires-Python: <3.13,>=3.12
15
+ Description-Content-Type: text/markdown
16
+ License-File: LICENSE
17
+ License-File: NOTICE
18
+ Requires-Dist: openhands==1.16.0
19
+ Requires-Dist: openhands-sdk==1.21.0
20
+ Dynamic: license-file
21
+
22
+ # RcOpenHandsSDK
23
+
24
+ RcOpenHandsSDK is AI Desk's MIT-only OpenHands distribution wrapper.
25
+ It exposes stable RingCentral-owned CLI entry points while delegating to the
26
+ upstream OpenHands CLI and SDK packages pinned below:
27
+
28
+ - `openhands==1.16.0`
29
+ - `openhands-sdk==1.21.0`
30
+
31
+ The package intentionally excludes OpenHands Cloud and `enterprise/` code. It
32
+ only depends on the upstream packages distributed under MIT-compatible terms for
33
+ the local CLI/SDK replacement path used by AI Desk daemon verification.
34
+
35
+ ## Commands
36
+
37
+ ```bash
38
+ rcopenhands --version
39
+ rcopenhands-acp --help
40
+ ```
41
+
42
+ AI Desk still uses the internal `openhands` agent type for compatibility with
43
+ existing task/session payloads, but CLI detection now resolves that type to the
44
+ `rcopenhands` command.
@@ -0,0 +1,19 @@
1
+ LICENSE
2
+ MANIFEST.in
3
+ NOTICE
4
+ PUBLISHING.md
5
+ README.md
6
+ UPSTREAM.md
7
+ pyproject.toml
8
+ rc_openhands_sdk/MIT_ONLY_MANIFEST.json
9
+ rc_openhands_sdk/__init__.py
10
+ rc_openhands_sdk/acp.py
11
+ rc_openhands_sdk/cli.py
12
+ rc_openhands_sdk/license_guard.py
13
+ rc_openhands_sdk.egg-info/PKG-INFO
14
+ rc_openhands_sdk.egg-info/SOURCES.txt
15
+ rc_openhands_sdk.egg-info/dependency_links.txt
16
+ rc_openhands_sdk.egg-info/entry_points.txt
17
+ rc_openhands_sdk.egg-info/requires.txt
18
+ rc_openhands_sdk.egg-info/top_level.txt
19
+ tests/test_cli_wrappers.py
@@ -0,0 +1,3 @@
1
+ [console_scripts]
2
+ rcopenhands = rc_openhands_sdk.cli:main
3
+ rcopenhands-acp = rc_openhands_sdk.acp:main
@@ -0,0 +1,2 @@
1
+ openhands==1.16.0
2
+ openhands-sdk==1.21.0
@@ -0,0 +1 @@
1
+ rc_openhands_sdk
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -0,0 +1,59 @@
1
+ import sys
2
+ from types import ModuleType
3
+
4
+ from rc_openhands_sdk import __version__
5
+ from rc_openhands_sdk import acp, cli
6
+ from rc_openhands_sdk.license_guard import load_manifest
7
+
8
+
9
+ def test_version_is_available() -> None:
10
+ assert __version__
11
+
12
+
13
+ def test_manifest_is_mit_only() -> None:
14
+ manifest = load_manifest()
15
+ assert manifest["license"] == "MIT"
16
+ assert manifest["ai_desk_command"] == "rcopenhands"
17
+ assert "enterprise/" in manifest["excluded"]
18
+
19
+
20
+ def test_cli_version_is_fast_and_ringcentral_owned(monkeypatch, capsys) -> None:
21
+ monkeypatch.setattr(sys, "argv", ["rcopenhands", "--version"])
22
+
23
+ cli.main()
24
+
25
+ assert "RcOpenHandsSDK" in capsys.readouterr().out
26
+
27
+
28
+ def test_cli_delegates_to_openhands_entrypoint() -> None:
29
+ calls: list[str] = []
30
+ package = ModuleType("openhands_cli")
31
+ entrypoint = ModuleType("openhands_cli.entrypoint")
32
+
33
+ def fake_main() -> None:
34
+ calls.append("cli")
35
+
36
+ entrypoint.main = fake_main # type: ignore[attr-defined]
37
+ sys.modules["openhands_cli"] = package
38
+ sys.modules["openhands_cli.entrypoint"] = entrypoint
39
+
40
+ cli.main()
41
+
42
+ assert calls == ["cli"]
43
+
44
+
45
+ def test_acp_delegates_to_openhands_acp() -> None:
46
+ calls: list[str] = []
47
+ package = ModuleType("openhands_cli")
48
+ acp_module = ModuleType("openhands_cli.acp")
49
+
50
+ def fake_main() -> None:
51
+ calls.append("acp")
52
+
53
+ acp_module.main = fake_main # type: ignore[attr-defined]
54
+ sys.modules["openhands_cli"] = package
55
+ sys.modules["openhands_cli.acp"] = acp_module
56
+
57
+ acp.main()
58
+
59
+ assert calls == ["acp"]