devops-bot-sdk 1.4.70__tar.gz → 1.4.71__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.70 → devops_bot_sdk-1.4.71}/PKG-INFO +1 -1
- {devops_bot_sdk-1.4.70 → devops_bot_sdk-1.4.71}/devops_bot_sdk.egg-info/PKG-INFO +1 -1
- {devops_bot_sdk-1.4.70 → devops_bot_sdk-1.4.71}/pyproject.toml +1 -1
- {devops_bot_sdk-1.4.70 → devops_bot_sdk-1.4.71}/sdk/__init__.py +2 -2
- {devops_bot_sdk-1.4.70 → devops_bot_sdk-1.4.71}/sdk/client.py +1 -1
- {devops_bot_sdk-1.4.70 → devops_bot_sdk-1.4.71}/sdk/ipc/handlers.py +23 -6
- {devops_bot_sdk-1.4.70 → devops_bot_sdk-1.4.71}/README.md +0 -0
- {devops_bot_sdk-1.4.70 → devops_bot_sdk-1.4.71}/devops_bot_sdk.egg-info/SOURCES.txt +0 -0
- {devops_bot_sdk-1.4.70 → devops_bot_sdk-1.4.71}/devops_bot_sdk.egg-info/dependency_links.txt +0 -0
- {devops_bot_sdk-1.4.70 → devops_bot_sdk-1.4.71}/devops_bot_sdk.egg-info/entry_points.txt +0 -0
- {devops_bot_sdk-1.4.70 → devops_bot_sdk-1.4.71}/devops_bot_sdk.egg-info/requires.txt +0 -0
- {devops_bot_sdk-1.4.70 → devops_bot_sdk-1.4.71}/devops_bot_sdk.egg-info/top_level.txt +0 -0
- {devops_bot_sdk-1.4.70 → devops_bot_sdk-1.4.71}/sdk/collectors/__init__.py +0 -0
- {devops_bot_sdk-1.4.70 → devops_bot_sdk-1.4.71}/sdk/collectors/files.py +0 -0
- {devops_bot_sdk-1.4.70 → devops_bot_sdk-1.4.71}/sdk/collectors/process.py +0 -0
- {devops_bot_sdk-1.4.70 → devops_bot_sdk-1.4.71}/sdk/collectors/screenshot.py +0 -0
- {devops_bot_sdk-1.4.70 → devops_bot_sdk-1.4.71}/sdk/config.py +0 -0
- {devops_bot_sdk-1.4.70 → devops_bot_sdk-1.4.71}/sdk/crucial.py +0 -0
- {devops_bot_sdk-1.4.70 → devops_bot_sdk-1.4.71}/sdk/exceptions.py +0 -0
- {devops_bot_sdk-1.4.70 → devops_bot_sdk-1.4.71}/sdk/git_ops.py +0 -0
- {devops_bot_sdk-1.4.70 → devops_bot_sdk-1.4.71}/sdk/graphify.py +0 -0
- {devops_bot_sdk-1.4.70 → devops_bot_sdk-1.4.71}/sdk/hooks/__init__.py +0 -0
- {devops_bot_sdk-1.4.70 → devops_bot_sdk-1.4.71}/sdk/hooks/crucial_guard.py +0 -0
- {devops_bot_sdk-1.4.70 → devops_bot_sdk-1.4.71}/sdk/ipc/__init__.py +0 -0
- {devops_bot_sdk-1.4.70 → devops_bot_sdk-1.4.71}/sdk/ipc/electron_bridge.py +0 -0
- {devops_bot_sdk-1.4.70 → devops_bot_sdk-1.4.71}/sdk/local_exec.py +0 -0
- {devops_bot_sdk-1.4.70 → devops_bot_sdk-1.4.71}/sdk/models/__init__.py +0 -0
- {devops_bot_sdk-1.4.70 → devops_bot_sdk-1.4.71}/sdk/models/envelope.py +0 -0
- {devops_bot_sdk-1.4.70 → devops_bot_sdk-1.4.71}/sdk/models/requests.py +0 -0
- {devops_bot_sdk-1.4.70 → devops_bot_sdk-1.4.71}/sdk/models/responses.py +0 -0
- {devops_bot_sdk-1.4.70 → devops_bot_sdk-1.4.71}/sdk/models/snapshots.py +0 -0
- {devops_bot_sdk-1.4.70 → devops_bot_sdk-1.4.71}/sdk/py.typed +0 -0
- {devops_bot_sdk-1.4.70 → devops_bot_sdk-1.4.71}/sdk/run_auto.py +0 -0
- {devops_bot_sdk-1.4.70 → devops_bot_sdk-1.4.71}/sdk/sse.py +0 -0
- {devops_bot_sdk-1.4.70 → devops_bot_sdk-1.4.71}/sdk/test.py +0 -0
- {devops_bot_sdk-1.4.70 → devops_bot_sdk-1.4.71}/sdk/test_pipeline.py +0 -0
- {devops_bot_sdk-1.4.70 → devops_bot_sdk-1.4.71}/sdk/updater.py +0 -0
- {devops_bot_sdk-1.4.70 → devops_bot_sdk-1.4.71}/setup.cfg +0 -0
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "devops-bot-sdk"
|
|
7
|
-
version = "1.4.
|
|
7
|
+
version = "1.4.71"
|
|
8
8
|
description = "DevOps Bot Desktop SDK — thin client for the AgentOS Electron desktop app"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = "LicenseRef-Proprietary"
|
|
@@ -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.71
|
|
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.71"
|
|
34
34
|
__author__ = "AgentOS"
|
|
35
35
|
|
|
36
36
|
from sdk.client import BackendClient
|
|
@@ -547,10 +547,11 @@ def _extract_json_block(text: str | None) -> dict | None:
|
|
|
547
547
|
return None
|
|
548
548
|
import json as _json
|
|
549
549
|
candidates = re.findall(r"```(?:json)?\s*(\{.*?\})\s*```", text, re.S | re.I)
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
550
|
+
# ALWAYS also consider the widest brace span — covers a missing/late closing
|
|
551
|
+
# fence, extra prose around the block, or a fenced capture that fails to parse.
|
|
552
|
+
start, end = text.find("{"), text.rfind("}")
|
|
553
|
+
if start != -1 and end > start:
|
|
554
|
+
candidates.append(text[start:end + 1])
|
|
554
555
|
for c in reversed(candidates):
|
|
555
556
|
try:
|
|
556
557
|
obj = _json.loads(c)
|
|
@@ -805,10 +806,26 @@ async def _handle_epic(
|
|
|
805
806
|
project_path, allowed_tools=_RECON_ALLOWED_TOOLS, # read-only analysis
|
|
806
807
|
github_token=await client.github_token(),
|
|
807
808
|
)
|
|
808
|
-
|
|
809
|
+
# A usage-limit hit must stop and retry later. For ANY other outcome, still try
|
|
810
|
+
# to parse the JSON — the model often produces a valid decomposition even when the
|
|
811
|
+
# run is flagged is_error (e.g. a stray read-only tool denial during exploration),
|
|
812
|
+
# and the result then lands in `error`. Don't discard that work over an is_error flag.
|
|
813
|
+
if gen.get("limit_exceeded"):
|
|
814
|
+
await client.log_activity(f"Epic {jira_key}: usage limit during decomposition — will retry after reset")
|
|
815
|
+
await client.move_to_backlog(tid)
|
|
816
|
+
await send(Envelope(
|
|
817
|
+
type=Envelope.TYPE_ERROR, thread_id=thread_id,
|
|
818
|
+
data={"code": "EPIC_DECOMPOSE_LIMIT", "task_id": tid,
|
|
819
|
+
"message": "Claude usage limit reached during epic decomposition"},
|
|
820
|
+
).model_dump())
|
|
821
|
+
return
|
|
822
|
+
doc = _extract_json_block(gen.get("result") or gen.get("error") or "")
|
|
809
823
|
stories = (doc or {}).get("stories") or []
|
|
810
824
|
if not doc or not stories:
|
|
811
|
-
|
|
825
|
+
had_output = bool(gen.get("result") or gen.get("error"))
|
|
826
|
+
reason = ("model output did not contain a parseable decomposition JSON"
|
|
827
|
+
if had_output else
|
|
828
|
+
(gen.get("error") or "no output from the decomposition run"))[:300]
|
|
812
829
|
await client.log_activity(f"Epic {jira_key}: decomposition failed — {reason}")
|
|
813
830
|
await client.move_to_backlog(tid)
|
|
814
831
|
await send(Envelope(
|
|
File without changes
|
|
File without changes
|
{devops_bot_sdk-1.4.70 → devops_bot_sdk-1.4.71}/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
|