getbased-agent-stack 0.5.3__tar.gz → 0.5.4__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.
- {getbased_agent_stack-0.5.3/src/getbased_agent_stack.egg-info → getbased_agent_stack-0.5.4}/PKG-INFO +1 -1
- {getbased_agent_stack-0.5.3 → getbased_agent_stack-0.5.4}/pyproject.toml +1 -1
- {getbased_agent_stack-0.5.3 → getbased_agent_stack-0.5.4}/src/getbased_agent_stack/__init__.py +1 -1
- {getbased_agent_stack-0.5.3 → getbased_agent_stack-0.5.4}/src/getbased_agent_stack/units.py +16 -1
- {getbased_agent_stack-0.5.3 → getbased_agent_stack-0.5.4/src/getbased_agent_stack.egg-info}/PKG-INFO +1 -1
- {getbased_agent_stack-0.5.3 → getbased_agent_stack-0.5.4}/tests/test_cli.py +5 -1
- {getbased_agent_stack-0.5.3 → getbased_agent_stack-0.5.4}/tests/test_units.py +3 -1
- {getbased_agent_stack-0.5.3 → getbased_agent_stack-0.5.4}/LICENSE +0 -0
- {getbased_agent_stack-0.5.3 → getbased_agent_stack-0.5.4}/README.md +0 -0
- {getbased_agent_stack-0.5.3 → getbased_agent_stack-0.5.4}/setup.cfg +0 -0
- {getbased_agent_stack-0.5.3 → getbased_agent_stack-0.5.4}/src/getbased_agent_stack/cli.py +0 -0
- {getbased_agent_stack-0.5.3 → getbased_agent_stack-0.5.4}/src/getbased_agent_stack/env_file.py +0 -0
- {getbased_agent_stack-0.5.3 → getbased_agent_stack-0.5.4}/src/getbased_agent_stack/mcp_configs.py +0 -0
- {getbased_agent_stack-0.5.3 → getbased_agent_stack-0.5.4}/src/getbased_agent_stack/systemd/getbased-dashboard.service +0 -0
- {getbased_agent_stack-0.5.3 → getbased_agent_stack-0.5.4}/src/getbased_agent_stack/systemd/getbased-rag.service +0 -0
- {getbased_agent_stack-0.5.3 → getbased_agent_stack-0.5.4}/src/getbased_agent_stack.egg-info/SOURCES.txt +0 -0
- {getbased_agent_stack-0.5.3 → getbased_agent_stack-0.5.4}/src/getbased_agent_stack.egg-info/dependency_links.txt +0 -0
- {getbased_agent_stack-0.5.3 → getbased_agent_stack-0.5.4}/src/getbased_agent_stack.egg-info/entry_points.txt +0 -0
- {getbased_agent_stack-0.5.3 → getbased_agent_stack-0.5.4}/src/getbased_agent_stack.egg-info/requires.txt +0 -0
- {getbased_agent_stack-0.5.3 → getbased_agent_stack-0.5.4}/src/getbased_agent_stack.egg-info/top_level.txt +0 -0
- {getbased_agent_stack-0.5.3 → getbased_agent_stack-0.5.4}/tests/test_env_file.py +0 -0
- {getbased_agent_stack-0.5.3 → getbased_agent_stack-0.5.4}/tests/test_integration.py +0 -0
- {getbased_agent_stack-0.5.3 → getbased_agent_stack-0.5.4}/tests/test_mcp_configs.py +0 -0
- {getbased_agent_stack-0.5.3 → getbased_agent_stack-0.5.4}/tests/test_systemd_units.py +0 -0
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "getbased-agent-stack"
|
|
7
|
-
version = "0.5.
|
|
7
|
+
version = "0.5.4"
|
|
8
8
|
description = "One-command install of the full getbased agent stack — getbased-mcp + getbased-rag + getbased-dashboard"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = "AGPL-3.0-or-later"
|
|
@@ -108,6 +108,17 @@ class UnitManager:
|
|
|
108
108
|
args.extend(SERVICE_NAMES)
|
|
109
109
|
return self._shell(args)
|
|
110
110
|
|
|
111
|
+
def restart(self) -> CommandResult:
|
|
112
|
+
"""Restart bundled services after an upgrade/reinstall.
|
|
113
|
+
|
|
114
|
+
`uv tool install` replaces files inside the tool environment. If the
|
|
115
|
+
services are already running, `systemctl enable --now …` is a no-op and
|
|
116
|
+
the old Python processes can keep serving from a half-replaced venv.
|
|
117
|
+
Restarting makes repeated `curl | bash` installs safe and starts the
|
|
118
|
+
units when they were previously inactive.
|
|
119
|
+
"""
|
|
120
|
+
return self._shell(["systemctl", "--user", "restart", *SERVICE_NAMES])
|
|
121
|
+
|
|
111
122
|
def disable(self, now: bool = True) -> CommandResult:
|
|
112
123
|
args = ["systemctl", "--user", "disable"]
|
|
113
124
|
if now:
|
|
@@ -154,7 +165,11 @@ class UnitManager:
|
|
|
154
165
|
else:
|
|
155
166
|
log.append("enabled " + ", ".join(SERVICE_NAMES))
|
|
156
167
|
if start:
|
|
157
|
-
|
|
168
|
+
r = self.restart()
|
|
169
|
+
if r.returncode != 0:
|
|
170
|
+
log.append(f"restart FAILED: {r.stderr.strip()}")
|
|
171
|
+
else:
|
|
172
|
+
log.append("restarted " + ", ".join(SERVICE_NAMES))
|
|
158
173
|
return log
|
|
159
174
|
|
|
160
175
|
def uninstall(self) -> "list[str]":
|
|
@@ -96,10 +96,14 @@ def test_install_writes_units_and_enables(stack_home, fake_shell):
|
|
|
96
96
|
assert (unit_dir / "getbased-rag.service").exists()
|
|
97
97
|
assert (unit_dir / "getbased-dashboard.service").exists()
|
|
98
98
|
|
|
99
|
-
# daemon-reload
|
|
99
|
+
# daemon-reload, enable --now, and restart all run. The explicit restart
|
|
100
|
+
# matters for re-running install.sh over an active stack after uv replaces
|
|
101
|
+
# the tool environment: old Python processes must not keep serving from a
|
|
102
|
+
# half-replaced venv.
|
|
100
103
|
all_calls = [" ".join(cmd) for cmd in fake_shell]
|
|
101
104
|
assert any("daemon-reload" in c for c in all_calls)
|
|
102
105
|
assert any("enable --now" in c for c in all_calls)
|
|
106
|
+
assert any("restart getbased-rag.service getbased-dashboard.service" in c for c in all_calls)
|
|
103
107
|
|
|
104
108
|
|
|
105
109
|
def test_install_no_enable_flag(stack_home, fake_shell):
|
|
@@ -145,11 +145,13 @@ def test_install_full_sequence(tmp_path):
|
|
|
145
145
|
# systemctl called in the expected order
|
|
146
146
|
assert shell.calls[0] == ["systemctl", "--user", "daemon-reload"]
|
|
147
147
|
assert shell.calls[1] == ["systemctl", "--user", "enable", "--now", *SERVICE_NAMES]
|
|
148
|
+
assert shell.calls[2] == ["systemctl", "--user", "restart", *SERVICE_NAMES]
|
|
148
149
|
# Log mentions what happened
|
|
149
150
|
joined = "\n".join(log)
|
|
150
151
|
assert "wrote" in joined
|
|
151
152
|
assert "enabled" in joined
|
|
152
|
-
assert "
|
|
153
|
+
assert "restarted" in joined
|
|
154
|
+
assert not any(line.startswith("started ") for line in log)
|
|
153
155
|
|
|
154
156
|
|
|
155
157
|
def test_install_daemon_reload_failure_short_circuits(tmp_path):
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{getbased_agent_stack-0.5.3 → getbased_agent_stack-0.5.4}/src/getbased_agent_stack/env_file.py
RENAMED
|
File without changes
|
{getbased_agent_stack-0.5.3 → getbased_agent_stack-0.5.4}/src/getbased_agent_stack/mcp_configs.py
RENAMED
|
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
|