devops-bot-sdk 1.4.141__tar.gz → 1.4.143__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.
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/PKG-INFO +1 -1
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/devops_bot_sdk.egg-info/PKG-INFO +1 -1
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/devops_bot_sdk.egg-info/SOURCES.txt +2 -1
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/__init__.py +2 -2
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/run_auto.py +8 -2
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/updater.py +24 -2
- devops_bot_sdk-1.4.143/tests/test_updater_extras.py +49 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/README.md +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/devops_bot_sdk.egg-info/dependency_links.txt +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/devops_bot_sdk.egg-info/entry_points.txt +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/devops_bot_sdk.egg-info/requires.txt +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/devops_bot_sdk.egg-info/top_level.txt +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/pyproject.toml +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/agentd.py +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/agents/__init__.py +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/agents/builder.py +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/agents/chat.py +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/agents/connectors.py +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/agents/engines/__init__.py +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/agents/engines/claude_code.py +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/agents/engines/http.py +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/agents/engines/mcp.py +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/agents/engines/n8n.py +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/agents/engines/shell.py +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/agents/integrations.py +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/agents/inventory.py +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/agents/library/__init__.py +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/agents/manifest.py +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/agents/prompt_studio.py +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/agents/prompt_template.py +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/agents/prompt_vars.py +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/agents/run_log.py +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/agents/secrets.py +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/agents/usage.py +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/agents/varstore.py +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/cli.py +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/client.py +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/collectors/__init__.py +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/collectors/files.py +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/collectors/process.py +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/collectors/screenshot.py +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/config.py +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/crucial.py +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/design_verify/__init__.py +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/design_verify/assets.py +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/design_verify/bootstrap.py +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/design_verify/browser.py +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/design_verify/compare.py +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/design_verify/loop.py +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/exceptions.py +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/git_ops.py +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/graphify.py +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/hooks/__init__.py +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/hooks/crucial_guard.py +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/ipc/__init__.py +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/ipc/electron_bridge.py +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/ipc/handlers.py +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/local_exec.py +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/models/__init__.py +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/models/envelope.py +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/models/requests.py +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/models/responses.py +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/models/snapshots.py +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/platform_compat.py +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/py.typed +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/sse.py +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/test.py +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/test_pipeline.py +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/ui/__init__.py +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/ui/api.py +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/ui/dashboard.py +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/ui/ip_allowlist.py +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/ui/jobs.py +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/ui/models.py +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/ui/runner.py +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/ui/security.py +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/ui/server.py +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/ui/service.py +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/ui/setup_manager.py +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/ui/static/agents.html +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/ui/static/app.js +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/ui/static/custom-agents.html +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/ui/static/default-agents.html +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/ui/static/index.html +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/ui/static/runs.html +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/ui/static/setup.html +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/ui/static/styles.css +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/sdk/ui/static/tickets.html +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/setup.cfg +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/tests/test_agent_chat_features.py +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/tests/test_agent_prompt_models.py +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/tests/test_agents_connectors_builder.py +0 -0
- {devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/tests/test_git_action.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"""AgentOS Desktop SDK — thin HTTPS/SSE client for the Electron app.
|
|
2
2
|
|
|
3
|
-
Version: 1.4.
|
|
3
|
+
Version: 1.4.143
|
|
4
4
|
|
|
5
5
|
Public surface:
|
|
6
6
|
BackendClient.from_config() — create client from ~/.agentos/config.toml
|
|
@@ -30,7 +30,7 @@ Rules:
|
|
|
30
30
|
- All data egress through submit_webhook only
|
|
31
31
|
"""
|
|
32
32
|
|
|
33
|
-
__version__ = "1.4.
|
|
33
|
+
__version__ = "1.4.143" # SINGLE SOURCE OF TRUTH — bump on every change; pyproject,
|
|
34
34
|
__author__ = "AgentOS" # sdk.client.SDK_VERSION and the UI server version all read this.
|
|
35
35
|
|
|
36
36
|
from sdk.client import BackendClient
|
|
@@ -572,10 +572,16 @@ def main() -> None:
|
|
|
572
572
|
try:
|
|
573
573
|
from sdk.ui import service as ui_service
|
|
574
574
|
ok, msg = ui_service.restart()
|
|
575
|
+
if not ok:
|
|
576
|
+
# No managed service yet (panel was started by hand) — install one
|
|
577
|
+
# so the panel comes up now AND after every reboot/update, on Linux
|
|
578
|
+
# (systemd), Windows (Scheduled Task) and macOS (launchd). This is
|
|
579
|
+
# what removes the manual "install + up agentos-ui" step.
|
|
580
|
+
ok, msg = ui_service.install()
|
|
575
581
|
print(f" control panel: {msg}" if ok
|
|
576
|
-
else f" control panel: not
|
|
582
|
+
else f" control panel: not started — {msg}")
|
|
577
583
|
except Exception as exc: # noqa: BLE001 — never fail the update on this
|
|
578
|
-
print(f" control panel: not
|
|
584
|
+
print(f" control panel: not started ({exc})")
|
|
579
585
|
pid = _daemon_running()
|
|
580
586
|
if pid:
|
|
581
587
|
print("note: a background loop is running the OLD version — "
|
|
@@ -20,11 +20,31 @@ import subprocess
|
|
|
20
20
|
import sys
|
|
21
21
|
|
|
22
22
|
_DIST = "devops-bot-sdk"
|
|
23
|
+
_EXTRAS = "[ui]" # control-panel deps (fastapi/uvicorn/starlette) — keep on every self-update
|
|
23
24
|
_GITHUB_REPO = "consultancy-outfit/DevOpsBot-SDK"
|
|
24
25
|
_GITHUB_SSH = f"git+ssh://git@github.com/{_GITHUB_REPO}.git"
|
|
25
26
|
_PYPI_JSON = f"https://pypi.org/pypi/{_DIST}/json"
|
|
26
27
|
|
|
27
28
|
|
|
29
|
+
def _with_extras(target: str) -> str:
|
|
30
|
+
"""Attach the ``[ui]`` extra so a self-update never drops the control-panel
|
|
31
|
+
deps — the reason ``agentos-ui`` broke (``No module named 'starlette'``) after
|
|
32
|
+
each upgrade. Cross-platform: the pip target syntax is identical on Linux and
|
|
33
|
+
Windows.
|
|
34
|
+
|
|
35
|
+
* bare dist name → ``devops-bot-sdk[ui]``
|
|
36
|
+
* git+/URL direct ref → ``devops-bot-sdk[ui] @ git+…`` (PEP 508)
|
|
37
|
+
Already-tagged targets are returned unchanged.
|
|
38
|
+
"""
|
|
39
|
+
if _EXTRAS in target:
|
|
40
|
+
return target
|
|
41
|
+
if "://" in target: # a VCS/URL install (git+ssh / git+https)
|
|
42
|
+
return f"{_DIST}{_EXTRAS} @ {target}"
|
|
43
|
+
if target == _DIST: # bare PyPI dist
|
|
44
|
+
return f"{_DIST}{_EXTRAS}"
|
|
45
|
+
return target
|
|
46
|
+
|
|
47
|
+
|
|
28
48
|
# ── Platform helpers ──────────────────────────────────────────────────────────
|
|
29
49
|
|
|
30
50
|
def _pip_flags() -> list[str]:
|
|
@@ -197,7 +217,9 @@ def _install_candidates() -> list[str]:
|
|
|
197
217
|
if gh_token:
|
|
198
218
|
cands.append(f"git+https://{gh_token}@github.com/{_GITHUB_REPO}.git@{branch}")
|
|
199
219
|
cands.append(_DIST)
|
|
200
|
-
|
|
220
|
+
# Every target carries the [ui] extra so the control-panel deps are reinstalled
|
|
221
|
+
# on each upgrade (previously they were dropped, breaking `agentos-ui`).
|
|
222
|
+
return _unique([_with_extras(c) for c in cands])
|
|
201
223
|
|
|
202
224
|
|
|
203
225
|
def _pip_install(url: str, *, force: bool = False) -> bool:
|
|
@@ -316,7 +338,7 @@ def auto_update_and_reexec(module: str, argv: list[str]) -> None:
|
|
|
316
338
|
"error: the SDK self-update left the install broken and auto-repair "
|
|
317
339
|
"failed.\n reinstall it manually, then re-run agentos-auto:\n"
|
|
318
340
|
f' "{sys.executable}" -m pip install --force-reinstall '
|
|
319
|
-
f'"git+https://github.com/{_GITHUB_REPO}.git@{_sdk_branch()}"'
|
|
341
|
+
f'"devops-bot-sdk[ui] @ git+https://github.com/{_GITHUB_REPO}.git@{_sdk_branch()}"'
|
|
320
342
|
)
|
|
321
343
|
sys.exit(1)
|
|
322
344
|
print("✓ repaired.")
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"""Regression: self-update must keep the ``[ui]`` extra so the control panel's
|
|
2
|
+
web deps (fastapi/uvicorn/starlette) are reinstalled on every upgrade.
|
|
3
|
+
|
|
4
|
+
Before this, ``agentos-auto update`` reinstalled ``devops-bot-sdk`` WITHOUT the
|
|
5
|
+
extra, so ``agentos-ui`` broke with ``No module named 'starlette'`` after each
|
|
6
|
+
update and had to be `pip install`ed by hand.
|
|
7
|
+
"""
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
from unittest.mock import patch
|
|
11
|
+
|
|
12
|
+
from sdk import updater
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class TestWithExtras:
|
|
16
|
+
def test_bare_dist_gets_extra(self):
|
|
17
|
+
assert updater._with_extras("devops-bot-sdk") == "devops-bot-sdk[ui]"
|
|
18
|
+
|
|
19
|
+
def test_git_ssh_uses_pep508_direct_ref(self):
|
|
20
|
+
url = "git+ssh://git@github.com/consultancy-outfit/DevOpsBot-SDK.git@main"
|
|
21
|
+
assert updater._with_extras(url) == f"devops-bot-sdk[ui] @ {url}"
|
|
22
|
+
|
|
23
|
+
def test_git_https_token_preserved(self):
|
|
24
|
+
url = "git+https://TOKEN@github.com/consultancy-outfit/DevOpsBot-SDK.git@main"
|
|
25
|
+
assert updater._with_extras(url) == f"devops-bot-sdk[ui] @ {url}"
|
|
26
|
+
|
|
27
|
+
def test_idempotent_bare(self):
|
|
28
|
+
assert updater._with_extras("devops-bot-sdk[ui]") == "devops-bot-sdk[ui]"
|
|
29
|
+
|
|
30
|
+
def test_idempotent_url(self):
|
|
31
|
+
tagged = "devops-bot-sdk[ui] @ git+ssh://git@github.com/x/y.git"
|
|
32
|
+
assert updater._with_extras(tagged) == tagged
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class TestInstallCandidates:
|
|
36
|
+
def test_every_candidate_carries_the_ui_extra(self):
|
|
37
|
+
# No GitHub token → the SSH + detected + PyPI candidates only.
|
|
38
|
+
with patch.object(updater, "_fetch_github_token", return_value=None), \
|
|
39
|
+
patch.object(updater, "_detect_install_url", return_value=updater._DIST):
|
|
40
|
+
cands = updater._install_candidates()
|
|
41
|
+
assert cands, "expected at least one install candidate"
|
|
42
|
+
assert all("[ui]" in c for c in cands), cands
|
|
43
|
+
|
|
44
|
+
def test_token_https_candidate_also_tagged(self):
|
|
45
|
+
with patch.object(updater, "_fetch_github_token", return_value="gho_x"), \
|
|
46
|
+
patch.object(updater, "_detect_install_url", return_value=updater._DIST):
|
|
47
|
+
cands = updater._install_candidates()
|
|
48
|
+
https = [c for c in cands if "https://gho_x@" in c]
|
|
49
|
+
assert https and all(c.startswith("devops-bot-sdk[ui] @ ") for c in https), cands
|
|
File without changes
|
{devops_bot_sdk-1.4.141 → devops_bot_sdk-1.4.143}/devops_bot_sdk.egg-info/dependency_links.txt
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
File without changes
|