arl-env 0.1.3__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 (137) hide show
  1. arl_env-0.1.3/.gitignore +70 -0
  2. arl_env-0.1.3/CHANGELOG.md +39 -0
  3. arl_env-0.1.3/PKG-INFO +129 -0
  4. arl_env-0.1.3/README.md +98 -0
  5. arl_env-0.1.3/arl/__init__.py +22 -0
  6. arl_env-0.1.3/arl/arl_client/__init__.py +150 -0
  7. arl_env-0.1.3/arl/arl_client/api/__init__.py +5 -0
  8. arl_env-0.1.3/arl/arl_client/api/default_api.py +1668 -0
  9. arl_env-0.1.3/arl/arl_client/api_client.py +797 -0
  10. arl_env-0.1.3/arl/arl_client/api_response.py +21 -0
  11. arl_env-0.1.3/arl/arl_client/configuration.py +572 -0
  12. arl_env-0.1.3/arl/arl_client/exceptions.py +216 -0
  13. arl_env-0.1.3/arl/arl_client/models/__init__.py +133 -0
  14. arl_env-0.1.3/arl/arl_client/models/condition.py +120 -0
  15. arl_env-0.1.3/arl/arl_client/models/list_meta.py +89 -0
  16. arl_env-0.1.3/arl/arl_client/models/object_meta.py +93 -0
  17. arl_env-0.1.3/arl/arl_client/models/sandbox.py +107 -0
  18. arl_env-0.1.3/arl/arl_client/models/sandbox_list.py +105 -0
  19. arl_env-0.1.3/arl/arl_client/models/sandbox_spec.py +98 -0
  20. arl_env-0.1.3/arl/arl_client/models/sandbox_spec_resources.py +124 -0
  21. arl_env-0.1.3/arl/arl_client/models/sandbox_spec_resources_claims_inner.py +89 -0
  22. arl_env-0.1.3/arl/arl_client/models/sandbox_spec_resources_limits_value.py +138 -0
  23. arl_env-0.1.3/arl/arl_client/models/sandbox_status.py +106 -0
  24. arl_env-0.1.3/arl/arl_client/models/task.py +107 -0
  25. arl_env-0.1.3/arl/arl_client/models/task_list.py +105 -0
  26. arl_env-0.1.3/arl/arl_client/models/task_spec.py +106 -0
  27. arl_env-0.1.3/arl/arl_client/models/task_status.py +110 -0
  28. arl_env-0.1.3/arl/arl_client/models/task_step.py +106 -0
  29. arl_env-0.1.3/arl/arl_client/models/warm_pool.py +107 -0
  30. arl_env-0.1.3/arl/arl_client/models/warm_pool_list.py +105 -0
  31. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec.py +93 -0
  32. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template.py +93 -0
  33. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec.py +292 -0
  34. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_affinity.py +102 -0
  35. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_affinity_node_affinity.py +101 -0
  36. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_affinity_node_affinity_preferred_during_scheduling_ignored_during_execution_inner.py +93 -0
  37. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_affinity_node_affinity_preferred_during_scheduling_ignored_during_execution_inner_preference.py +104 -0
  38. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_affinity_node_affinity_preferred_during_scheduling_ignored_during_execution_inner_preference_match_expressions_inner.py +91 -0
  39. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_affinity_node_affinity_required_during_scheduling_ignored_during_execution.py +95 -0
  40. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_affinity_pod_affinity.py +105 -0
  41. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_affinity_pod_affinity_preferred_during_scheduling_ignored_during_execution_inner.py +93 -0
  42. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_affinity_pod_affinity_preferred_during_scheduling_ignored_during_execution_inner_pod_affinity_term.py +104 -0
  43. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_affinity_pod_affinity_preferred_during_scheduling_ignored_during_execution_inner_pod_affinity_term_label_selector.py +97 -0
  44. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_containers_inner.py +213 -0
  45. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_containers_inner_env_from_inner.py +98 -0
  46. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_containers_inner_env_from_inner_config_map_ref.py +89 -0
  47. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_containers_inner_env_inner.py +95 -0
  48. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_containers_inner_env_inner_value_from.py +114 -0
  49. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_containers_inner_env_inner_value_from_config_map_key_ref.py +91 -0
  50. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_containers_inner_env_inner_value_from_field_ref.py +89 -0
  51. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_containers_inner_env_inner_value_from_file_key_ref.py +93 -0
  52. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_containers_inner_env_inner_value_from_resource_field_ref.py +95 -0
  53. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_containers_inner_lifecycle.py +98 -0
  54. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_containers_inner_lifecycle_post_start.py +109 -0
  55. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_containers_inner_lifecycle_post_start_exec.py +87 -0
  56. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_containers_inner_lifecycle_post_start_http_get.py +107 -0
  57. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_containers_inner_lifecycle_post_start_http_get_http_headers_inner.py +89 -0
  58. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_containers_inner_lifecycle_post_start_http_get_port.py +138 -0
  59. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_containers_inner_lifecycle_post_start_sleep.py +87 -0
  60. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_containers_inner_lifecycle_post_start_tcp_socket.py +93 -0
  61. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_containers_inner_liveness_probe.py +121 -0
  62. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_containers_inner_liveness_probe_grpc.py +89 -0
  63. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_containers_inner_ports_inner.py +95 -0
  64. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_containers_inner_resize_policy_inner.py +89 -0
  65. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_containers_inner_restart_policy_rules_inner.py +93 -0
  66. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_containers_inner_restart_policy_rules_inner_exit_codes.py +89 -0
  67. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_containers_inner_security_context.py +128 -0
  68. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_containers_inner_security_context_app_armor_profile.py +89 -0
  69. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_containers_inner_security_context_capabilities.py +89 -0
  70. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_containers_inner_security_context_se_linux_options.py +93 -0
  71. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_containers_inner_security_context_windows_options.py +93 -0
  72. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_containers_inner_volume_devices_inner.py +89 -0
  73. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_containers_inner_volume_mounts_inner.py +99 -0
  74. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_dns_config.py +99 -0
  75. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_dns_config_options_inner.py +89 -0
  76. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_ephemeral_containers_inner.py +215 -0
  77. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_host_aliases_inner.py +89 -0
  78. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_image_pull_secrets_inner.py +87 -0
  79. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_os.py +87 -0
  80. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_readiness_gates_inner.py +87 -0
  81. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_resource_claims_inner.py +91 -0
  82. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_security_context.py +134 -0
  83. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_tolerations_inner.py +95 -0
  84. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_topology_spread_constraints_inner.py +105 -0
  85. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_volumes_inner.py +267 -0
  86. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_volumes_inner_aws_elastic_block_store.py +93 -0
  87. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_volumes_inner_azure_disk.py +97 -0
  88. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_volumes_inner_azure_file.py +91 -0
  89. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_volumes_inner_cephfs.py +101 -0
  90. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_volumes_inner_cinder.py +97 -0
  91. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_volumes_inner_config_map.py +101 -0
  92. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_volumes_inner_config_map_items_inner.py +91 -0
  93. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_volumes_inner_csi.py +99 -0
  94. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_volumes_inner_downward_api.py +97 -0
  95. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_volumes_inner_downward_api_items_inner.py +101 -0
  96. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_volumes_inner_empty_dir.py +93 -0
  97. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_volumes_inner_ephemeral.py +91 -0
  98. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_volumes_inner_ephemeral_volume_claim_template.py +93 -0
  99. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_volumes_inner_ephemeral_volume_claim_template_spec.py +119 -0
  100. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_volumes_inner_ephemeral_volume_claim_template_spec_data_source.py +91 -0
  101. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_volumes_inner_ephemeral_volume_claim_template_spec_data_source_ref.py +93 -0
  102. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_volumes_inner_ephemeral_volume_claim_template_spec_resources.py +114 -0
  103. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_volumes_inner_fc.py +95 -0
  104. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_volumes_inner_flex_volume.py +99 -0
  105. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_volumes_inner_flocker.py +89 -0
  106. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_volumes_inner_gce_persistent_disk.py +93 -0
  107. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_volumes_inner_git_repo.py +91 -0
  108. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_volumes_inner_glusterfs.py +91 -0
  109. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_volumes_inner_host_path.py +89 -0
  110. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_volumes_inner_image.py +89 -0
  111. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_volumes_inner_iscsi.py +111 -0
  112. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_volumes_inner_nfs.py +91 -0
  113. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_volumes_inner_persistent_volume_claim.py +89 -0
  114. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_volumes_inner_photon_persistent_disk.py +89 -0
  115. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_volumes_inner_portworx_volume.py +91 -0
  116. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_volumes_inner_projected.py +97 -0
  117. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_volumes_inner_projected_sources_inner.py +120 -0
  118. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_volumes_inner_projected_sources_inner_cluster_trust_bundle.py +99 -0
  119. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_volumes_inner_projected_sources_inner_config_map.py +99 -0
  120. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_volumes_inner_projected_sources_inner_downward_api.py +95 -0
  121. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_volumes_inner_projected_sources_inner_pod_certificate.py +99 -0
  122. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_volumes_inner_projected_sources_inner_service_account_token.py +91 -0
  123. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_volumes_inner_quobyte.py +97 -0
  124. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_volumes_inner_rbd.py +105 -0
  125. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_volumes_inner_scale_io.py +109 -0
  126. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_volumes_inner_secret.py +101 -0
  127. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_volumes_inner_storageos.py +99 -0
  128. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_volumes_inner_vsphere_volume.py +93 -0
  129. arl_env-0.1.3/arl/arl_client/models/warm_pool_spec_template_spec_workload_ref.py +91 -0
  130. arl_env-0.1.3/arl/arl_client/models/warm_pool_status.py +99 -0
  131. arl_env-0.1.3/arl/arl_client/py.typed +0 -0
  132. arl_env-0.1.3/arl/arl_client/rest.py +258 -0
  133. arl_env-0.1.3/arl/py.typed +0 -0
  134. arl_env-0.1.3/arl/session.py +414 -0
  135. arl_env-0.1.3/arl/types.py +193 -0
  136. arl_env-0.1.3/arl/warmpool.py +252 -0
  137. arl_env-0.1.3/pyproject.toml +81 -0
@@ -0,0 +1,70 @@
1
+ # Binaries for programs and plugins
2
+ *.exe
3
+ *.exe~
4
+ *.dll
5
+ *.so
6
+ *.dylib
7
+ bin/
8
+
9
+ # Test binary, built with `go test -c`
10
+ *.test
11
+
12
+ # Output of the go coverage tool
13
+ *.out
14
+
15
+ # Dependency directories
16
+ vendor/
17
+
18
+ # Go workspace file
19
+ go.work
20
+
21
+ # IDE
22
+ .idea/
23
+ .vscode/
24
+ *.swp
25
+ *.swo
26
+ *~
27
+
28
+ # OS
29
+ .DS_Store
30
+ Thumbs.db
31
+
32
+ # Temporary files
33
+ tmp/
34
+ *.tmp
35
+
36
+ # Kubernetes
37
+ kubeconfig
38
+ *.kubeconfig
39
+
40
+ # Python
41
+ __pycache__/
42
+ *.py[cod]
43
+ *$py.class
44
+ *.so
45
+ .Python
46
+ .venv
47
+ venv/
48
+ ENV/
49
+ env/
50
+ .eggs/
51
+ *.egg-info/
52
+ dist/
53
+ build/
54
+ .pytest_cache/
55
+ .mypy_cache/
56
+ .ruff_cache/
57
+ .coverage
58
+ htmlcov/
59
+ *.cover
60
+ .hypothesis/
61
+ *.log
62
+
63
+ # uv
64
+ .uv/
65
+ uv.lock
66
+
67
+ # helm chart
68
+ *.tgz
69
+ Chart.lockoperator
70
+ sidecar
@@ -0,0 +1,39 @@
1
+ # CHANGELOG
2
+
3
+ All notable changes to the ARL Python SDK will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [Unreleased]
9
+
10
+ ## [0.1.0] - 2026-01-06
11
+
12
+ ### Added
13
+ - Initial release of unified ARL Python SDK
14
+ - `SandboxSession` class for high-level sandbox management
15
+ - Context manager support for automatic resource cleanup
16
+ - `TaskStep` TypedDict for type-safe task definitions
17
+ - Support for Command and FilePatch task types
18
+ - Auto-generated OpenAPI client (internal `_client` module)
19
+ - Full type hints with mypy strict mode
20
+ - Comprehensive examples in `examples/python/`
21
+ - Documentation in `sdk/python/arl/README.md`
22
+
23
+ ### Features
24
+ - Create sandboxes from warm pools
25
+ - Execute multi-step task pipelines
26
+ - Environment variable and working directory support
27
+ - Automatic sandbox cleanup
28
+ - Sandbox reuse for multiple tasks
29
+ - Timeout configuration
30
+ - Kubernetes integration via official client
31
+
32
+ ### Developer Experience
33
+ - Modern PEP 621 pyproject.toml format
34
+ - uv-based package management
35
+ - Ruff for linting
36
+ - MyPy for type checking
37
+ - Hatchling build backend
38
+
39
+ [0.1.0]: https://github.com/Lincyaw/agent-env/releases/tag/v0.1.0
arl_env-0.1.3/PKG-INFO ADDED
@@ -0,0 +1,129 @@
1
+ Metadata-Version: 2.4
2
+ Name: arl-env
3
+ Version: 0.1.3
4
+ Summary: ARL Infrastructure - Python SDK for Kubernetes-based Agent Runtime Layer
5
+ Project-URL: Homepage, https://github.com/Lincyaw/agent-env
6
+ Project-URL: Repository, https://github.com/Lincyaw/agent-env
7
+ Project-URL: Documentation, https://github.com/Lincyaw/agent-env/tree/main/docs
8
+ Project-URL: Issues, https://github.com/Lincyaw/agent-env/issues
9
+ Author: ARL Infrastructure Team
10
+ License: Apache-2.0
11
+ Keywords: agent,kubernetes,operator,runtime,sandbox,task-execution
12
+ Classifier: Development Status :: 3 - Alpha
13
+ Classifier: Intended Audience :: Developers
14
+ Classifier: License :: OSI Approved :: Apache Software License
15
+ Classifier: Programming Language :: Python :: 3
16
+ Classifier: Programming Language :: Python :: 3.10
17
+ Classifier: Programming Language :: Python :: 3.11
18
+ Classifier: Programming Language :: Python :: 3.12
19
+ Requires-Python: >=3.10
20
+ Requires-Dist: kubernetes>=28.0.0
21
+ Requires-Dist: pydantic>=2
22
+ Requires-Dist: python-dateutil>=2.8.2
23
+ Requires-Dist: typing-extensions>=4.7.1
24
+ Requires-Dist: urllib3<3.0.0,>=1.25.3
25
+ Provides-Extra: dev
26
+ Requires-Dist: mypy>=1.13.0; extra == 'dev'
27
+ Requires-Dist: pytest-cov>=2.8.1; extra == 'dev'
28
+ Requires-Dist: pytest>=7.2.1; extra == 'dev'
29
+ Requires-Dist: ruff>=0.8.0; extra == 'dev'
30
+ Description-Content-Type: text/markdown
31
+
32
+ # ARL Wrapper
33
+
34
+ High-level Python wrapper for the ARL (Agent Runtime Layer) client providing simplified sandbox session management.
35
+
36
+ ## Features
37
+
38
+ - **Context Manager Support**: Automatic sandbox lifecycle management
39
+ - **Type-Safe API**: Full type hints with Pydantic models
40
+ - **Kubernetes Integration**: Direct CRD interaction
41
+ - **Error Handling**: Comprehensive error reporting and retry logic
42
+
43
+ ## Installation
44
+
45
+ ```bash
46
+ uv add arl-wrapper
47
+ ```
48
+
49
+ ## Quick Start
50
+
51
+ ```python
52
+ from arl import SandboxSession
53
+
54
+ # Using context manager (recommended)
55
+ with SandboxSession(pool_ref="python-39-std", namespace="default") as session:
56
+ result = session.execute([
57
+ {
58
+ "name": "hello",
59
+ "type": "Command",
60
+ "command": ["echo", "Hello, World!"],
61
+ }
62
+ ])
63
+
64
+ # Access results
65
+ status = result["status"]
66
+ for step in status.get("steps", []):
67
+ print(f"Step: {step['name']}")
68
+ print(f"Exit Code: {step['exitCode']}")
69
+ print(f"Stdout: {step['stdout']}")
70
+ ```
71
+
72
+ ## Manual Lifecycle Management
73
+
74
+ For long-running operations or sandbox reuse:
75
+
76
+ ```python
77
+ session = SandboxSession(pool_ref="python-39-std", namespace="default", keep_alive=True)
78
+
79
+ try:
80
+ session.create_sandbox()
81
+
82
+ # Task 1
83
+ result1 = session.execute([...])
84
+
85
+ # Task 2 (reuses same sandbox)
86
+ result2 = session.execute([...])
87
+
88
+ finally:
89
+ session.delete_sandbox()
90
+ ```
91
+
92
+ ## Task Step Types
93
+
94
+ ### Command Step
95
+
96
+ ```python
97
+ {
98
+ "name": "run_script",
99
+ "type": "Command",
100
+ "command": ["python", "script.py"],
101
+ "env": {"DEBUG": "1"}, # optional
102
+ "workDir": "/workspace", # optional
103
+ }
104
+ ```
105
+
106
+ ### FilePatch Step
107
+
108
+ ```python
109
+ {
110
+ "name": "create_config",
111
+ "type": "FilePatch",
112
+ "path": "/workspace/config.yaml",
113
+ "content": "key: value",
114
+ }
115
+ ```
116
+
117
+ ## Architecture
118
+
119
+ - **SandboxSession**: High-level API using Kubernetes CRDs for task execution
120
+ - **Task CRD**: Operator watches and executes tasks via sidecar
121
+ - **Auto-generated client**: `arl-client` package (CRD models)
122
+
123
+ Task execution flow:
124
+ 1. Client creates Task CRD via Kubernetes API
125
+ 2. Operator watches for new tasks
126
+ 3. Operator communicates with sidecar to execute steps
127
+ 4. Client polls Task status for results
128
+
129
+ This architecture ensures tasks can be executed from anywhere with cluster access.
@@ -0,0 +1,98 @@
1
+ # ARL Wrapper
2
+
3
+ High-level Python wrapper for the ARL (Agent Runtime Layer) client providing simplified sandbox session management.
4
+
5
+ ## Features
6
+
7
+ - **Context Manager Support**: Automatic sandbox lifecycle management
8
+ - **Type-Safe API**: Full type hints with Pydantic models
9
+ - **Kubernetes Integration**: Direct CRD interaction
10
+ - **Error Handling**: Comprehensive error reporting and retry logic
11
+
12
+ ## Installation
13
+
14
+ ```bash
15
+ uv add arl-wrapper
16
+ ```
17
+
18
+ ## Quick Start
19
+
20
+ ```python
21
+ from arl import SandboxSession
22
+
23
+ # Using context manager (recommended)
24
+ with SandboxSession(pool_ref="python-39-std", namespace="default") as session:
25
+ result = session.execute([
26
+ {
27
+ "name": "hello",
28
+ "type": "Command",
29
+ "command": ["echo", "Hello, World!"],
30
+ }
31
+ ])
32
+
33
+ # Access results
34
+ status = result["status"]
35
+ for step in status.get("steps", []):
36
+ print(f"Step: {step['name']}")
37
+ print(f"Exit Code: {step['exitCode']}")
38
+ print(f"Stdout: {step['stdout']}")
39
+ ```
40
+
41
+ ## Manual Lifecycle Management
42
+
43
+ For long-running operations or sandbox reuse:
44
+
45
+ ```python
46
+ session = SandboxSession(pool_ref="python-39-std", namespace="default", keep_alive=True)
47
+
48
+ try:
49
+ session.create_sandbox()
50
+
51
+ # Task 1
52
+ result1 = session.execute([...])
53
+
54
+ # Task 2 (reuses same sandbox)
55
+ result2 = session.execute([...])
56
+
57
+ finally:
58
+ session.delete_sandbox()
59
+ ```
60
+
61
+ ## Task Step Types
62
+
63
+ ### Command Step
64
+
65
+ ```python
66
+ {
67
+ "name": "run_script",
68
+ "type": "Command",
69
+ "command": ["python", "script.py"],
70
+ "env": {"DEBUG": "1"}, # optional
71
+ "workDir": "/workspace", # optional
72
+ }
73
+ ```
74
+
75
+ ### FilePatch Step
76
+
77
+ ```python
78
+ {
79
+ "name": "create_config",
80
+ "type": "FilePatch",
81
+ "path": "/workspace/config.yaml",
82
+ "content": "key: value",
83
+ }
84
+ ```
85
+
86
+ ## Architecture
87
+
88
+ - **SandboxSession**: High-level API using Kubernetes CRDs for task execution
89
+ - **Task CRD**: Operator watches and executes tasks via sidecar
90
+ - **Auto-generated client**: `arl-client` package (CRD models)
91
+
92
+ Task execution flow:
93
+ 1. Client creates Task CRD via Kubernetes API
94
+ 2. Operator watches for new tasks
95
+ 3. Operator communicates with sidecar to execute steps
96
+ 4. Client polls Task status for results
97
+
98
+ This architecture ensures tasks can be executed from anywhere with cluster access.
@@ -0,0 +1,22 @@
1
+ """ARL - High-level API for Agent Runtime Layer."""
2
+
3
+ from arl.session import SandboxSession
4
+ from arl.types import (
5
+ SandboxResource,
6
+ TaskResource,
7
+ TaskStatus,
8
+ TaskStep,
9
+ TaskStepResult,
10
+ )
11
+ from arl.warmpool import WarmPoolManager
12
+
13
+ __version__ = "0.1.0"
14
+ __all__ = [
15
+ "SandboxResource",
16
+ "SandboxSession",
17
+ "TaskResource",
18
+ "TaskStatus",
19
+ "TaskStep",
20
+ "TaskStepResult",
21
+ "WarmPoolManager",
22
+ ]
@@ -0,0 +1,150 @@
1
+ # coding: utf-8
2
+
3
+ # flake8: noqa
4
+
5
+ """
6
+ ARL Infrastructure API
7
+
8
+ OpenAPI specification for ARL (Agentic RL) Infrastructure custom resources. This SDK provides models for WarmPool, Sandbox, and Task Kubernetes custom resources.
9
+
10
+ The version of the OpenAPI document: v1alpha1
11
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
12
+
13
+ Do not edit the class manually.
14
+ """ # noqa: E501
15
+
16
+
17
+ __version__ = "0.1.0"
18
+
19
+ # import apis into sdk package
20
+ from .api.default_api import DefaultApi
21
+
22
+ # import ApiClient
23
+ from .api_response import ApiResponse
24
+ from .api_client import ApiClient
25
+ from .configuration import Configuration
26
+ from .exceptions import OpenApiException
27
+ from .exceptions import ApiTypeError
28
+ from .exceptions import ApiValueError
29
+ from .exceptions import ApiKeyError
30
+ from .exceptions import ApiAttributeError
31
+ from .exceptions import ApiException
32
+
33
+ # import models into sdk package
34
+ from .models.condition import Condition
35
+ from .models.list_meta import ListMeta
36
+ from .models.object_meta import ObjectMeta
37
+ from .models.sandbox import Sandbox
38
+ from .models.sandbox_list import SandboxList
39
+ from .models.sandbox_spec import SandboxSpec
40
+ from .models.sandbox_spec_resources import SandboxSpecResources
41
+ from .models.sandbox_spec_resources_claims_inner import SandboxSpecResourcesClaimsInner
42
+ from .models.sandbox_spec_resources_limits_value import SandboxSpecResourcesLimitsValue
43
+ from .models.sandbox_status import SandboxStatus
44
+ from .models.task import Task
45
+ from .models.task_list import TaskList
46
+ from .models.task_spec import TaskSpec
47
+ from .models.task_status import TaskStatus
48
+ from .models.task_step import TaskStep
49
+ from .models.warm_pool import WarmPool
50
+ from .models.warm_pool_list import WarmPoolList
51
+ from .models.warm_pool_spec import WarmPoolSpec
52
+ from .models.warm_pool_spec_template import WarmPoolSpecTemplate
53
+ from .models.warm_pool_spec_template_spec import WarmPoolSpecTemplateSpec
54
+ from .models.warm_pool_spec_template_spec_affinity import WarmPoolSpecTemplateSpecAffinity
55
+ from .models.warm_pool_spec_template_spec_affinity_node_affinity import WarmPoolSpecTemplateSpecAffinityNodeAffinity
56
+ from .models.warm_pool_spec_template_spec_affinity_node_affinity_preferred_during_scheduling_ignored_during_execution_inner import WarmPoolSpecTemplateSpecAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecutionInner
57
+ from .models.warm_pool_spec_template_spec_affinity_node_affinity_preferred_during_scheduling_ignored_during_execution_inner_preference import WarmPoolSpecTemplateSpecAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecutionInnerPreference
58
+ from .models.warm_pool_spec_template_spec_affinity_node_affinity_preferred_during_scheduling_ignored_during_execution_inner_preference_match_expressions_inner import WarmPoolSpecTemplateSpecAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecutionInnerPreferenceMatchExpressionsInner
59
+ from .models.warm_pool_spec_template_spec_affinity_node_affinity_required_during_scheduling_ignored_during_execution import WarmPoolSpecTemplateSpecAffinityNodeAffinityRequiredDuringSchedulingIgnoredDuringExecution
60
+ from .models.warm_pool_spec_template_spec_affinity_pod_affinity import WarmPoolSpecTemplateSpecAffinityPodAffinity
61
+ from .models.warm_pool_spec_template_spec_affinity_pod_affinity_preferred_during_scheduling_ignored_during_execution_inner import WarmPoolSpecTemplateSpecAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionInner
62
+ from .models.warm_pool_spec_template_spec_affinity_pod_affinity_preferred_during_scheduling_ignored_during_execution_inner_pod_affinity_term import WarmPoolSpecTemplateSpecAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionInnerPodAffinityTerm
63
+ from .models.warm_pool_spec_template_spec_affinity_pod_affinity_preferred_during_scheduling_ignored_during_execution_inner_pod_affinity_term_label_selector import WarmPoolSpecTemplateSpecAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionInnerPodAffinityTermLabelSelector
64
+ from .models.warm_pool_spec_template_spec_containers_inner import WarmPoolSpecTemplateSpecContainersInner
65
+ from .models.warm_pool_spec_template_spec_containers_inner_env_from_inner import WarmPoolSpecTemplateSpecContainersInnerEnvFromInner
66
+ from .models.warm_pool_spec_template_spec_containers_inner_env_from_inner_config_map_ref import WarmPoolSpecTemplateSpecContainersInnerEnvFromInnerConfigMapRef
67
+ from .models.warm_pool_spec_template_spec_containers_inner_env_inner import WarmPoolSpecTemplateSpecContainersInnerEnvInner
68
+ from .models.warm_pool_spec_template_spec_containers_inner_env_inner_value_from import WarmPoolSpecTemplateSpecContainersInnerEnvInnerValueFrom
69
+ from .models.warm_pool_spec_template_spec_containers_inner_env_inner_value_from_config_map_key_ref import WarmPoolSpecTemplateSpecContainersInnerEnvInnerValueFromConfigMapKeyRef
70
+ from .models.warm_pool_spec_template_spec_containers_inner_env_inner_value_from_field_ref import WarmPoolSpecTemplateSpecContainersInnerEnvInnerValueFromFieldRef
71
+ from .models.warm_pool_spec_template_spec_containers_inner_env_inner_value_from_file_key_ref import WarmPoolSpecTemplateSpecContainersInnerEnvInnerValueFromFileKeyRef
72
+ from .models.warm_pool_spec_template_spec_containers_inner_env_inner_value_from_resource_field_ref import WarmPoolSpecTemplateSpecContainersInnerEnvInnerValueFromResourceFieldRef
73
+ from .models.warm_pool_spec_template_spec_containers_inner_lifecycle import WarmPoolSpecTemplateSpecContainersInnerLifecycle
74
+ from .models.warm_pool_spec_template_spec_containers_inner_lifecycle_post_start import WarmPoolSpecTemplateSpecContainersInnerLifecyclePostStart
75
+ from .models.warm_pool_spec_template_spec_containers_inner_lifecycle_post_start_exec import WarmPoolSpecTemplateSpecContainersInnerLifecyclePostStartExec
76
+ from .models.warm_pool_spec_template_spec_containers_inner_lifecycle_post_start_http_get import WarmPoolSpecTemplateSpecContainersInnerLifecyclePostStartHttpGet
77
+ from .models.warm_pool_spec_template_spec_containers_inner_lifecycle_post_start_http_get_http_headers_inner import WarmPoolSpecTemplateSpecContainersInnerLifecyclePostStartHttpGetHttpHeadersInner
78
+ from .models.warm_pool_spec_template_spec_containers_inner_lifecycle_post_start_http_get_port import WarmPoolSpecTemplateSpecContainersInnerLifecyclePostStartHttpGetPort
79
+ from .models.warm_pool_spec_template_spec_containers_inner_lifecycle_post_start_sleep import WarmPoolSpecTemplateSpecContainersInnerLifecyclePostStartSleep
80
+ from .models.warm_pool_spec_template_spec_containers_inner_lifecycle_post_start_tcp_socket import WarmPoolSpecTemplateSpecContainersInnerLifecyclePostStartTcpSocket
81
+ from .models.warm_pool_spec_template_spec_containers_inner_liveness_probe import WarmPoolSpecTemplateSpecContainersInnerLivenessProbe
82
+ from .models.warm_pool_spec_template_spec_containers_inner_liveness_probe_grpc import WarmPoolSpecTemplateSpecContainersInnerLivenessProbeGrpc
83
+ from .models.warm_pool_spec_template_spec_containers_inner_ports_inner import WarmPoolSpecTemplateSpecContainersInnerPortsInner
84
+ from .models.warm_pool_spec_template_spec_containers_inner_resize_policy_inner import WarmPoolSpecTemplateSpecContainersInnerResizePolicyInner
85
+ from .models.warm_pool_spec_template_spec_containers_inner_restart_policy_rules_inner import WarmPoolSpecTemplateSpecContainersInnerRestartPolicyRulesInner
86
+ from .models.warm_pool_spec_template_spec_containers_inner_restart_policy_rules_inner_exit_codes import WarmPoolSpecTemplateSpecContainersInnerRestartPolicyRulesInnerExitCodes
87
+ from .models.warm_pool_spec_template_spec_containers_inner_security_context import WarmPoolSpecTemplateSpecContainersInnerSecurityContext
88
+ from .models.warm_pool_spec_template_spec_containers_inner_security_context_app_armor_profile import WarmPoolSpecTemplateSpecContainersInnerSecurityContextAppArmorProfile
89
+ from .models.warm_pool_spec_template_spec_containers_inner_security_context_capabilities import WarmPoolSpecTemplateSpecContainersInnerSecurityContextCapabilities
90
+ from .models.warm_pool_spec_template_spec_containers_inner_security_context_se_linux_options import WarmPoolSpecTemplateSpecContainersInnerSecurityContextSeLinuxOptions
91
+ from .models.warm_pool_spec_template_spec_containers_inner_security_context_windows_options import WarmPoolSpecTemplateSpecContainersInnerSecurityContextWindowsOptions
92
+ from .models.warm_pool_spec_template_spec_containers_inner_volume_devices_inner import WarmPoolSpecTemplateSpecContainersInnerVolumeDevicesInner
93
+ from .models.warm_pool_spec_template_spec_containers_inner_volume_mounts_inner import WarmPoolSpecTemplateSpecContainersInnerVolumeMountsInner
94
+ from .models.warm_pool_spec_template_spec_dns_config import WarmPoolSpecTemplateSpecDnsConfig
95
+ from .models.warm_pool_spec_template_spec_dns_config_options_inner import WarmPoolSpecTemplateSpecDnsConfigOptionsInner
96
+ from .models.warm_pool_spec_template_spec_ephemeral_containers_inner import WarmPoolSpecTemplateSpecEphemeralContainersInner
97
+ from .models.warm_pool_spec_template_spec_host_aliases_inner import WarmPoolSpecTemplateSpecHostAliasesInner
98
+ from .models.warm_pool_spec_template_spec_image_pull_secrets_inner import WarmPoolSpecTemplateSpecImagePullSecretsInner
99
+ from .models.warm_pool_spec_template_spec_os import WarmPoolSpecTemplateSpecOs
100
+ from .models.warm_pool_spec_template_spec_readiness_gates_inner import WarmPoolSpecTemplateSpecReadinessGatesInner
101
+ from .models.warm_pool_spec_template_spec_resource_claims_inner import WarmPoolSpecTemplateSpecResourceClaimsInner
102
+ from .models.warm_pool_spec_template_spec_security_context import WarmPoolSpecTemplateSpecSecurityContext
103
+ from .models.warm_pool_spec_template_spec_tolerations_inner import WarmPoolSpecTemplateSpecTolerationsInner
104
+ from .models.warm_pool_spec_template_spec_topology_spread_constraints_inner import WarmPoolSpecTemplateSpecTopologySpreadConstraintsInner
105
+ from .models.warm_pool_spec_template_spec_volumes_inner import WarmPoolSpecTemplateSpecVolumesInner
106
+ from .models.warm_pool_spec_template_spec_volumes_inner_aws_elastic_block_store import WarmPoolSpecTemplateSpecVolumesInnerAwsElasticBlockStore
107
+ from .models.warm_pool_spec_template_spec_volumes_inner_azure_disk import WarmPoolSpecTemplateSpecVolumesInnerAzureDisk
108
+ from .models.warm_pool_spec_template_spec_volumes_inner_azure_file import WarmPoolSpecTemplateSpecVolumesInnerAzureFile
109
+ from .models.warm_pool_spec_template_spec_volumes_inner_cephfs import WarmPoolSpecTemplateSpecVolumesInnerCephfs
110
+ from .models.warm_pool_spec_template_spec_volumes_inner_cinder import WarmPoolSpecTemplateSpecVolumesInnerCinder
111
+ from .models.warm_pool_spec_template_spec_volumes_inner_config_map import WarmPoolSpecTemplateSpecVolumesInnerConfigMap
112
+ from .models.warm_pool_spec_template_spec_volumes_inner_config_map_items_inner import WarmPoolSpecTemplateSpecVolumesInnerConfigMapItemsInner
113
+ from .models.warm_pool_spec_template_spec_volumes_inner_csi import WarmPoolSpecTemplateSpecVolumesInnerCsi
114
+ from .models.warm_pool_spec_template_spec_volumes_inner_downward_api import WarmPoolSpecTemplateSpecVolumesInnerDownwardAPI
115
+ from .models.warm_pool_spec_template_spec_volumes_inner_downward_api_items_inner import WarmPoolSpecTemplateSpecVolumesInnerDownwardAPIItemsInner
116
+ from .models.warm_pool_spec_template_spec_volumes_inner_empty_dir import WarmPoolSpecTemplateSpecVolumesInnerEmptyDir
117
+ from .models.warm_pool_spec_template_spec_volumes_inner_ephemeral import WarmPoolSpecTemplateSpecVolumesInnerEphemeral
118
+ from .models.warm_pool_spec_template_spec_volumes_inner_ephemeral_volume_claim_template import WarmPoolSpecTemplateSpecVolumesInnerEphemeralVolumeClaimTemplate
119
+ from .models.warm_pool_spec_template_spec_volumes_inner_ephemeral_volume_claim_template_spec import WarmPoolSpecTemplateSpecVolumesInnerEphemeralVolumeClaimTemplateSpec
120
+ from .models.warm_pool_spec_template_spec_volumes_inner_ephemeral_volume_claim_template_spec_data_source import WarmPoolSpecTemplateSpecVolumesInnerEphemeralVolumeClaimTemplateSpecDataSource
121
+ from .models.warm_pool_spec_template_spec_volumes_inner_ephemeral_volume_claim_template_spec_data_source_ref import WarmPoolSpecTemplateSpecVolumesInnerEphemeralVolumeClaimTemplateSpecDataSourceRef
122
+ from .models.warm_pool_spec_template_spec_volumes_inner_ephemeral_volume_claim_template_spec_resources import WarmPoolSpecTemplateSpecVolumesInnerEphemeralVolumeClaimTemplateSpecResources
123
+ from .models.warm_pool_spec_template_spec_volumes_inner_fc import WarmPoolSpecTemplateSpecVolumesInnerFc
124
+ from .models.warm_pool_spec_template_spec_volumes_inner_flex_volume import WarmPoolSpecTemplateSpecVolumesInnerFlexVolume
125
+ from .models.warm_pool_spec_template_spec_volumes_inner_flocker import WarmPoolSpecTemplateSpecVolumesInnerFlocker
126
+ from .models.warm_pool_spec_template_spec_volumes_inner_gce_persistent_disk import WarmPoolSpecTemplateSpecVolumesInnerGcePersistentDisk
127
+ from .models.warm_pool_spec_template_spec_volumes_inner_git_repo import WarmPoolSpecTemplateSpecVolumesInnerGitRepo
128
+ from .models.warm_pool_spec_template_spec_volumes_inner_glusterfs import WarmPoolSpecTemplateSpecVolumesInnerGlusterfs
129
+ from .models.warm_pool_spec_template_spec_volumes_inner_host_path import WarmPoolSpecTemplateSpecVolumesInnerHostPath
130
+ from .models.warm_pool_spec_template_spec_volumes_inner_image import WarmPoolSpecTemplateSpecVolumesInnerImage
131
+ from .models.warm_pool_spec_template_spec_volumes_inner_iscsi import WarmPoolSpecTemplateSpecVolumesInnerIscsi
132
+ from .models.warm_pool_spec_template_spec_volumes_inner_nfs import WarmPoolSpecTemplateSpecVolumesInnerNfs
133
+ from .models.warm_pool_spec_template_spec_volumes_inner_persistent_volume_claim import WarmPoolSpecTemplateSpecVolumesInnerPersistentVolumeClaim
134
+ from .models.warm_pool_spec_template_spec_volumes_inner_photon_persistent_disk import WarmPoolSpecTemplateSpecVolumesInnerPhotonPersistentDisk
135
+ from .models.warm_pool_spec_template_spec_volumes_inner_portworx_volume import WarmPoolSpecTemplateSpecVolumesInnerPortworxVolume
136
+ from .models.warm_pool_spec_template_spec_volumes_inner_projected import WarmPoolSpecTemplateSpecVolumesInnerProjected
137
+ from .models.warm_pool_spec_template_spec_volumes_inner_projected_sources_inner import WarmPoolSpecTemplateSpecVolumesInnerProjectedSourcesInner
138
+ from .models.warm_pool_spec_template_spec_volumes_inner_projected_sources_inner_cluster_trust_bundle import WarmPoolSpecTemplateSpecVolumesInnerProjectedSourcesInnerClusterTrustBundle
139
+ from .models.warm_pool_spec_template_spec_volumes_inner_projected_sources_inner_config_map import WarmPoolSpecTemplateSpecVolumesInnerProjectedSourcesInnerConfigMap
140
+ from .models.warm_pool_spec_template_spec_volumes_inner_projected_sources_inner_downward_api import WarmPoolSpecTemplateSpecVolumesInnerProjectedSourcesInnerDownwardAPI
141
+ from .models.warm_pool_spec_template_spec_volumes_inner_projected_sources_inner_pod_certificate import WarmPoolSpecTemplateSpecVolumesInnerProjectedSourcesInnerPodCertificate
142
+ from .models.warm_pool_spec_template_spec_volumes_inner_projected_sources_inner_service_account_token import WarmPoolSpecTemplateSpecVolumesInnerProjectedSourcesInnerServiceAccountToken
143
+ from .models.warm_pool_spec_template_spec_volumes_inner_quobyte import WarmPoolSpecTemplateSpecVolumesInnerQuobyte
144
+ from .models.warm_pool_spec_template_spec_volumes_inner_rbd import WarmPoolSpecTemplateSpecVolumesInnerRbd
145
+ from .models.warm_pool_spec_template_spec_volumes_inner_scale_io import WarmPoolSpecTemplateSpecVolumesInnerScaleIO
146
+ from .models.warm_pool_spec_template_spec_volumes_inner_secret import WarmPoolSpecTemplateSpecVolumesInnerSecret
147
+ from .models.warm_pool_spec_template_spec_volumes_inner_storageos import WarmPoolSpecTemplateSpecVolumesInnerStorageos
148
+ from .models.warm_pool_spec_template_spec_volumes_inner_vsphere_volume import WarmPoolSpecTemplateSpecVolumesInnerVsphereVolume
149
+ from .models.warm_pool_spec_template_spec_workload_ref import WarmPoolSpecTemplateSpecWorkloadRef
150
+ from .models.warm_pool_status import WarmPoolStatus
@@ -0,0 +1,5 @@
1
+ # flake8: noqa
2
+
3
+ # import apis into api package
4
+ from .api.default_api import DefaultApi
5
+