runbuoy 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.
Files changed (41) hide show
  1. runbuoy-0.1.0/.gitignore +24 -0
  2. runbuoy-0.1.0/LICENSE +21 -0
  3. runbuoy-0.1.0/PKG-INFO +114 -0
  4. runbuoy-0.1.0/README.md +87 -0
  5. runbuoy-0.1.0/pyproject.toml +76 -0
  6. runbuoy-0.1.0/src/runbuoy/__init__.py +6 -0
  7. runbuoy-0.1.0/src/runbuoy/__main__.py +4 -0
  8. runbuoy-0.1.0/src/runbuoy/cli/__init__.py +1 -0
  9. runbuoy-0.1.0/src/runbuoy/cli/app.py +480 -0
  10. runbuoy-0.1.0/src/runbuoy/config.py +115 -0
  11. runbuoy-0.1.0/src/runbuoy/executors/__init__.py +3 -0
  12. runbuoy-0.1.0/src/runbuoy/executors/tmux.py +68 -0
  13. runbuoy-0.1.0/src/runbuoy/ids.py +19 -0
  14. runbuoy-0.1.0/src/runbuoy/models.py +141 -0
  15. runbuoy-0.1.0/src/runbuoy/networking/__init__.py +3 -0
  16. runbuoy-0.1.0/src/runbuoy/networking/client.py +123 -0
  17. runbuoy-0.1.0/src/runbuoy/pairing/__init__.py +3 -0
  18. runbuoy-0.1.0/src/runbuoy/pairing/flow.py +82 -0
  19. runbuoy-0.1.0/src/runbuoy/paths.py +68 -0
  20. runbuoy-0.1.0/src/runbuoy/persistence/__init__.py +3 -0
  21. runbuoy-0.1.0/src/runbuoy/persistence/store.py +335 -0
  22. runbuoy-0.1.0/src/runbuoy/progress/__init__.py +17 -0
  23. runbuoy-0.1.0/src/runbuoy/progress/adapters.py +208 -0
  24. runbuoy-0.1.0/src/runbuoy/sdk.py +57 -0
  25. runbuoy-0.1.0/src/runbuoy/security/__init__.py +1 -0
  26. runbuoy-0.1.0/src/runbuoy/security/redaction.py +70 -0
  27. runbuoy-0.1.0/src/runbuoy/security/titles.py +35 -0
  28. runbuoy-0.1.0/src/runbuoy/worker/__init__.py +1 -0
  29. runbuoy-0.1.0/src/runbuoy/worker/runtime.py +323 -0
  30. runbuoy-0.1.0/src/runbuoy/worker/signals.py +32 -0
  31. runbuoy-0.1.0/src/runbuoy/worker/socket_server.py +102 -0
  32. runbuoy-0.1.0/tests/test_cli.py +147 -0
  33. runbuoy-0.1.0/tests/test_config.py +29 -0
  34. runbuoy-0.1.0/tests/test_networking.py +67 -0
  35. runbuoy-0.1.0/tests/test_pairing.py +71 -0
  36. runbuoy-0.1.0/tests/test_persistence.py +73 -0
  37. runbuoy-0.1.0/tests/test_progress.py +40 -0
  38. runbuoy-0.1.0/tests/test_security.py +36 -0
  39. runbuoy-0.1.0/tests/test_socket_and_signals.py +57 -0
  40. runbuoy-0.1.0/tests/test_worker.py +110 -0
  41. runbuoy-0.1.0/uv.lock +816 -0
@@ -0,0 +1,24 @@
1
+ .DS_Store
2
+ .env
3
+ .env.*
4
+ !.env.example
5
+ .local-packages/
6
+ .pytest_cache/
7
+ .mypy_cache/
8
+ .ruff_cache/
9
+ .venv/
10
+ __pycache__/
11
+ *.py[cod]
12
+ *.egg-info/
13
+ *.sqlite
14
+ *.sqlite3
15
+ *.log
16
+ .coverage
17
+ htmlcov/
18
+ build/
19
+ dist/
20
+ DerivedData/
21
+ *.xcuserstate
22
+ xcuserdata/
23
+ server/.apns-mock/
24
+ cli/.runbuoy-test/
runbuoy-0.1.0/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Seth Webster
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.
runbuoy-0.1.0/PKG-INFO ADDED
@@ -0,0 +1,114 @@
1
+ Metadata-Version: 2.4
2
+ Name: runbuoy
3
+ Version: 0.1.0
4
+ Summary: Read-only command status delivery for RunBuoy
5
+ Project-URL: Homepage, https://github.com/TANG617/RunBuoy
6
+ Project-URL: Documentation, https://github.com/TANG617/RunBuoy#readme
7
+ Project-URL: Repository, https://github.com/TANG617/RunBuoy
8
+ Project-URL: Issues, https://github.com/TANG617/RunBuoy/issues
9
+ License-Expression: MIT
10
+ License-File: LICENSE
11
+ Keywords: cli,monitoring,notifications,progress,runbuoy
12
+ Classifier: Development Status :: 3 - Alpha
13
+ Classifier: Environment :: Console
14
+ Classifier: Operating System :: MacOS
15
+ Classifier: Operating System :: POSIX :: Linux
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: Programming Language :: Python :: 3.12
18
+ Classifier: Topic :: System :: Monitoring
19
+ Requires-Python: >=3.12
20
+ Requires-Dist: httpx<1,>=0.27
21
+ Requires-Dist: keyring<26,>=25
22
+ Requires-Dist: pydantic<3,>=2.8
23
+ Requires-Dist: qrcode<9,>=7.4
24
+ Requires-Dist: rich<15,>=13.7
25
+ Requires-Dist: typer<1,>=0.12
26
+ Description-Content-Type: text/markdown
27
+
28
+ # RunBuoy CLI
29
+
30
+ RunBuoy keeps long-running commands visible from an iPhone without exposing a
31
+ remote-control surface. The CLI runs commands locally, records structured
32
+ status and progress, and sends a deliberately limited projection to a paired
33
+ RunBuoy server.
34
+
35
+ ## Requirements
36
+
37
+ - macOS or Linux
38
+ - Python 3.12 or newer
39
+ - `tmux` for durable runs
40
+
41
+ Install `tmux` before RunBuoy:
42
+
43
+ ```bash
44
+ # macOS
45
+ brew install tmux
46
+
47
+ # Debian or Ubuntu
48
+ sudo apt install tmux
49
+ ```
50
+
51
+ ## Install
52
+
53
+ Install the CLI in an isolated environment with
54
+ [uv](https://docs.astral.sh/uv/):
55
+
56
+ ```bash
57
+ uv tool install runbuoy
58
+ ```
59
+
60
+ Or use [pipx](https://pipx.pypa.io/):
61
+
62
+ ```bash
63
+ pipx install runbuoy
64
+ ```
65
+
66
+ The installed executable is available directly:
67
+
68
+ ```bash
69
+ runbuoy doctor
70
+ runbuoy capabilities --json
71
+ ```
72
+
73
+ Upgrade with the same tool used for installation:
74
+
75
+ ```bash
76
+ uv tool upgrade runbuoy
77
+ # or
78
+ pipx upgrade runbuoy
79
+ ```
80
+
81
+ ## Quick start
82
+
83
+ Pair this machine with the RunBuoy iOS app:
84
+
85
+ ```bash
86
+ runbuoy pair
87
+ ```
88
+
89
+ Run a command:
90
+
91
+ ```bash
92
+ runbuoy run -- python3 experiment.py
93
+ ```
94
+
95
+ Send a notification without starting a managed run:
96
+
97
+ ```bash
98
+ runbuoy notify \
99
+ --title "Build completed" \
100
+ --body "Release build succeeded" \
101
+ --level success
102
+ ```
103
+
104
+ RunBuoy does not upload full command arguments, working directories,
105
+ environment variables, source code, or complete logs by default. See the
106
+ [security documentation](https://github.com/TANG617/RunBuoy/blob/main/docs/security.md)
107
+ for the complete data boundary.
108
+
109
+ ## Source and support
110
+
111
+ Source code, documentation, and issue tracking are available in the
112
+ [RunBuoy repository](https://github.com/TANG617/RunBuoy).
113
+
114
+ RunBuoy is licensed under the MIT License.
@@ -0,0 +1,87 @@
1
+ # RunBuoy CLI
2
+
3
+ RunBuoy keeps long-running commands visible from an iPhone without exposing a
4
+ remote-control surface. The CLI runs commands locally, records structured
5
+ status and progress, and sends a deliberately limited projection to a paired
6
+ RunBuoy server.
7
+
8
+ ## Requirements
9
+
10
+ - macOS or Linux
11
+ - Python 3.12 or newer
12
+ - `tmux` for durable runs
13
+
14
+ Install `tmux` before RunBuoy:
15
+
16
+ ```bash
17
+ # macOS
18
+ brew install tmux
19
+
20
+ # Debian or Ubuntu
21
+ sudo apt install tmux
22
+ ```
23
+
24
+ ## Install
25
+
26
+ Install the CLI in an isolated environment with
27
+ [uv](https://docs.astral.sh/uv/):
28
+
29
+ ```bash
30
+ uv tool install runbuoy
31
+ ```
32
+
33
+ Or use [pipx](https://pipx.pypa.io/):
34
+
35
+ ```bash
36
+ pipx install runbuoy
37
+ ```
38
+
39
+ The installed executable is available directly:
40
+
41
+ ```bash
42
+ runbuoy doctor
43
+ runbuoy capabilities --json
44
+ ```
45
+
46
+ Upgrade with the same tool used for installation:
47
+
48
+ ```bash
49
+ uv tool upgrade runbuoy
50
+ # or
51
+ pipx upgrade runbuoy
52
+ ```
53
+
54
+ ## Quick start
55
+
56
+ Pair this machine with the RunBuoy iOS app:
57
+
58
+ ```bash
59
+ runbuoy pair
60
+ ```
61
+
62
+ Run a command:
63
+
64
+ ```bash
65
+ runbuoy run -- python3 experiment.py
66
+ ```
67
+
68
+ Send a notification without starting a managed run:
69
+
70
+ ```bash
71
+ runbuoy notify \
72
+ --title "Build completed" \
73
+ --body "Release build succeeded" \
74
+ --level success
75
+ ```
76
+
77
+ RunBuoy does not upload full command arguments, working directories,
78
+ environment variables, source code, or complete logs by default. See the
79
+ [security documentation](https://github.com/TANG617/RunBuoy/blob/main/docs/security.md)
80
+ for the complete data boundary.
81
+
82
+ ## Source and support
83
+
84
+ Source code, documentation, and issue tracking are available in the
85
+ [RunBuoy repository](https://github.com/TANG617/RunBuoy).
86
+
87
+ RunBuoy is licensed under the MIT License.
@@ -0,0 +1,76 @@
1
+ [build-system]
2
+ requires = ["hatchling"]
3
+ build-backend = "hatchling.build"
4
+
5
+ [project]
6
+ name = "runbuoy"
7
+ dynamic = ["version"]
8
+ description = "Read-only command status delivery for RunBuoy"
9
+ readme = "README.md"
10
+ license = "MIT"
11
+ requires-python = ">=3.12"
12
+ keywords = ["cli", "monitoring", "notifications", "progress", "runbuoy"]
13
+ classifiers = [
14
+ "Development Status :: 3 - Alpha",
15
+ "Environment :: Console",
16
+ "Operating System :: MacOS",
17
+ "Operating System :: POSIX :: Linux",
18
+ "Programming Language :: Python :: 3",
19
+ "Programming Language :: Python :: 3.12",
20
+ "Topic :: System :: Monitoring",
21
+ ]
22
+ dependencies = [
23
+ "httpx>=0.27,<1",
24
+ "keyring>=25,<26",
25
+ "pydantic>=2.8,<3",
26
+ "qrcode>=7.4,<9",
27
+ "rich>=13.7,<15",
28
+ "typer>=0.12,<1",
29
+ ]
30
+
31
+ [project.scripts]
32
+ runbuoy = "runbuoy.cli.app:main"
33
+
34
+ [project.urls]
35
+ Homepage = "https://github.com/TANG617/RunBuoy"
36
+ Documentation = "https://github.com/TANG617/RunBuoy#readme"
37
+ Repository = "https://github.com/TANG617/RunBuoy"
38
+ Issues = "https://github.com/TANG617/RunBuoy/issues"
39
+
40
+ [dependency-groups]
41
+ dev = [
42
+ "mypy>=1.11,<2",
43
+ "pytest>=8.3,<9",
44
+ "pytest-timeout>=2.3,<3",
45
+ "ruff>=0.6,<1",
46
+ "types-qrcode>=7.4",
47
+ ]
48
+
49
+ [tool.hatch.build.targets.wheel]
50
+ packages = ["src/runbuoy"]
51
+
52
+ [tool.hatch.version]
53
+ path = "src/runbuoy/__init__.py"
54
+
55
+ [tool.pytest.ini_options]
56
+ addopts = "-ra"
57
+ testpaths = ["tests"]
58
+ markers = [
59
+ "tmux: requires the tmux executable and a working local tmux server",
60
+ "integration: starts local processes",
61
+ ]
62
+
63
+ [tool.ruff]
64
+ target-version = "py312"
65
+ line-length = 100
66
+
67
+ [tool.ruff.lint]
68
+ select = ["E", "F", "I", "UP", "B", "SIM", "RUF"]
69
+
70
+ [tool.ruff.lint.per-file-ignores]
71
+ "src/runbuoy/cli/app.py" = ["B008"]
72
+
73
+ [tool.mypy]
74
+ python_version = "3.12"
75
+ strict = true
76
+ packages = ["runbuoy"]
@@ -0,0 +1,6 @@
1
+ """RunBuoy CLI and small structured-progress client."""
2
+
3
+ from runbuoy.sdk import attention, message, phase, progress
4
+
5
+ __all__ = ["attention", "message", "phase", "progress"]
6
+ __version__ = "0.1.0"
@@ -0,0 +1,4 @@
1
+ from runbuoy.cli.app import main
2
+
3
+ if __name__ == "__main__":
4
+ main()
@@ -0,0 +1 @@
1
+ """Typer command surface."""