devops-bot-sdk 1.4.79__tar.gz → 1.4.81__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.79 → devops_bot_sdk-1.4.81}/PKG-INFO +1 -1
- {devops_bot_sdk-1.4.79 → devops_bot_sdk-1.4.81}/devops_bot_sdk.egg-info/PKG-INFO +1 -1
- {devops_bot_sdk-1.4.79 → devops_bot_sdk-1.4.81}/pyproject.toml +1 -1
- {devops_bot_sdk-1.4.79 → devops_bot_sdk-1.4.81}/sdk/__init__.py +2 -2
- {devops_bot_sdk-1.4.79 → devops_bot_sdk-1.4.81}/sdk/client.py +1 -1
- {devops_bot_sdk-1.4.79 → devops_bot_sdk-1.4.81}/sdk/ipc/handlers.py +14 -7
- {devops_bot_sdk-1.4.79 → devops_bot_sdk-1.4.81}/README.md +0 -0
- {devops_bot_sdk-1.4.79 → devops_bot_sdk-1.4.81}/devops_bot_sdk.egg-info/SOURCES.txt +0 -0
- {devops_bot_sdk-1.4.79 → devops_bot_sdk-1.4.81}/devops_bot_sdk.egg-info/dependency_links.txt +0 -0
- {devops_bot_sdk-1.4.79 → devops_bot_sdk-1.4.81}/devops_bot_sdk.egg-info/entry_points.txt +0 -0
- {devops_bot_sdk-1.4.79 → devops_bot_sdk-1.4.81}/devops_bot_sdk.egg-info/requires.txt +0 -0
- {devops_bot_sdk-1.4.79 → devops_bot_sdk-1.4.81}/devops_bot_sdk.egg-info/top_level.txt +0 -0
- {devops_bot_sdk-1.4.79 → devops_bot_sdk-1.4.81}/sdk/collectors/__init__.py +0 -0
- {devops_bot_sdk-1.4.79 → devops_bot_sdk-1.4.81}/sdk/collectors/files.py +0 -0
- {devops_bot_sdk-1.4.79 → devops_bot_sdk-1.4.81}/sdk/collectors/process.py +0 -0
- {devops_bot_sdk-1.4.79 → devops_bot_sdk-1.4.81}/sdk/collectors/screenshot.py +0 -0
- {devops_bot_sdk-1.4.79 → devops_bot_sdk-1.4.81}/sdk/config.py +0 -0
- {devops_bot_sdk-1.4.79 → devops_bot_sdk-1.4.81}/sdk/crucial.py +0 -0
- {devops_bot_sdk-1.4.79 → devops_bot_sdk-1.4.81}/sdk/exceptions.py +0 -0
- {devops_bot_sdk-1.4.79 → devops_bot_sdk-1.4.81}/sdk/git_ops.py +0 -0
- {devops_bot_sdk-1.4.79 → devops_bot_sdk-1.4.81}/sdk/graphify.py +0 -0
- {devops_bot_sdk-1.4.79 → devops_bot_sdk-1.4.81}/sdk/hooks/__init__.py +0 -0
- {devops_bot_sdk-1.4.79 → devops_bot_sdk-1.4.81}/sdk/hooks/crucial_guard.py +0 -0
- {devops_bot_sdk-1.4.79 → devops_bot_sdk-1.4.81}/sdk/ipc/__init__.py +0 -0
- {devops_bot_sdk-1.4.79 → devops_bot_sdk-1.4.81}/sdk/ipc/electron_bridge.py +0 -0
- {devops_bot_sdk-1.4.79 → devops_bot_sdk-1.4.81}/sdk/local_exec.py +0 -0
- {devops_bot_sdk-1.4.79 → devops_bot_sdk-1.4.81}/sdk/models/__init__.py +0 -0
- {devops_bot_sdk-1.4.79 → devops_bot_sdk-1.4.81}/sdk/models/envelope.py +0 -0
- {devops_bot_sdk-1.4.79 → devops_bot_sdk-1.4.81}/sdk/models/requests.py +0 -0
- {devops_bot_sdk-1.4.79 → devops_bot_sdk-1.4.81}/sdk/models/responses.py +0 -0
- {devops_bot_sdk-1.4.79 → devops_bot_sdk-1.4.81}/sdk/models/snapshots.py +0 -0
- {devops_bot_sdk-1.4.79 → devops_bot_sdk-1.4.81}/sdk/py.typed +0 -0
- {devops_bot_sdk-1.4.79 → devops_bot_sdk-1.4.81}/sdk/run_auto.py +0 -0
- {devops_bot_sdk-1.4.79 → devops_bot_sdk-1.4.81}/sdk/sse.py +0 -0
- {devops_bot_sdk-1.4.79 → devops_bot_sdk-1.4.81}/sdk/test.py +0 -0
- {devops_bot_sdk-1.4.79 → devops_bot_sdk-1.4.81}/sdk/test_pipeline.py +0 -0
- {devops_bot_sdk-1.4.79 → devops_bot_sdk-1.4.81}/sdk/updater.py +0 -0
- {devops_bot_sdk-1.4.79 → devops_bot_sdk-1.4.81}/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.81"
|
|
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.81
|
|
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.81"
|
|
34
34
|
__author__ = "AgentOS"
|
|
35
35
|
|
|
36
36
|
from sdk.client import BackendClient
|
|
@@ -578,9 +578,12 @@ def _build_epic_prompt(jira_key: str, summary: str, description: str | None,
|
|
|
578
578
|
"}\n\n"
|
|
579
579
|
"Do NOT produce humanInstructions for the stories — created stories are clean "
|
|
580
580
|
"user-story artifacts; implementation instructions are added later.\n"
|
|
581
|
-
"
|
|
582
|
-
|
|
583
|
-
|
|
581
|
+
+ (f"Generate EXACTLY {story_count} user stor{'y' if story_count == 1 else 'ies'} — "
|
|
582
|
+
"the epic explicitly asks for this many; do not produce more or fewer.\n"
|
|
583
|
+
if story_count else
|
|
584
|
+
"Create as many stories as the epic genuinely needs (do not pad or truncate "
|
|
585
|
+
"artificially); each story must be independently implementable.\n")
|
|
586
|
+
+ "assigneeEmail is OPTIONAL per story: set it ONLY when the epic explicitly "
|
|
584
587
|
"assigns that specific work to a named person/email (e.g. 'assign the API to "
|
|
585
588
|
"alice@x.com'); otherwise omit it.\n\n"
|
|
586
589
|
"=== EPIC FORMAT (epic_description MUST follow this exactly) ===\n"
|
|
@@ -876,12 +879,16 @@ async def _handle_epic(
|
|
|
876
879
|
).model_dump())
|
|
877
880
|
|
|
878
881
|
# 1. Generate the decomposition, grounded in the codebase where one exists.
|
|
882
|
+
# If the description/instructions ask for a specific number of stories, honor
|
|
883
|
+
# it exactly; otherwise the model decides (bounded by _MAX_EPIC_STORIES).
|
|
884
|
+
story_count = _extract_story_count(description) or _extract_story_count(human)
|
|
885
|
+
limit = story_count or _MAX_EPIC_STORIES
|
|
879
886
|
try:
|
|
880
887
|
await graphify.prepare(project_path)
|
|
881
888
|
except Exception: # noqa: BLE001
|
|
882
889
|
pass
|
|
883
890
|
gen = await _run_generation(
|
|
884
|
-
_build_epic_prompt(jira_key, summary, description, human),
|
|
891
|
+
_build_epic_prompt(jira_key, summary, description, human, story_count=story_count),
|
|
885
892
|
project_path, send=send, thread_id=thread_id,
|
|
886
893
|
label=f"Epic {jira_key}: generating user stories",
|
|
887
894
|
github_token=await client.github_token(),
|
|
@@ -924,7 +931,7 @@ async def _handle_epic(
|
|
|
924
931
|
await send(Envelope(
|
|
925
932
|
type="step_update", thread_id=thread_id,
|
|
926
933
|
data={"jira_task_id": tid, "current_step": f"Epic {jira_key}: marked Done — "
|
|
927
|
-
f"creating {min(len(stories),
|
|
934
|
+
f"creating {min(len(stories), limit)} user Story(ies)"},
|
|
928
935
|
).model_dump())
|
|
929
936
|
|
|
930
937
|
# 3. Create a To Do child Task per story, inheriting the Epic's fields.
|
|
@@ -933,7 +940,7 @@ async def _handle_epic(
|
|
|
933
940
|
# inherited assignee — but ONLY on the CHILD task, never on the parent Epic.
|
|
934
941
|
desc_email = _extract_email(description) or _extract_email(human)
|
|
935
942
|
created: list[str] = []
|
|
936
|
-
for st in stories[:
|
|
943
|
+
for st in stories[:limit]:
|
|
937
944
|
if not isinstance(st, dict) or not (st.get("summary") or "").strip():
|
|
938
945
|
continue
|
|
939
946
|
# Precedence: a per-story email the model extracted → an email in the
|
|
@@ -976,7 +983,7 @@ async def _handle_epic(
|
|
|
976
983
|
d = Path(stories_dir).expanduser()
|
|
977
984
|
d.mkdir(parents=True, exist_ok=True) # create from scratch
|
|
978
985
|
written = 0
|
|
979
|
-
for i, st in enumerate(stories[:
|
|
986
|
+
for i, st in enumerate(stories[:limit], 1):
|
|
980
987
|
if not isinstance(st, dict) or not (st.get("summary") or "").strip():
|
|
981
988
|
continue
|
|
982
989
|
title = str(st.get("summary", "")).strip()
|
|
File without changes
|
|
File without changes
|
{devops_bot_sdk-1.4.79 → devops_bot_sdk-1.4.81}/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
|