devops-bot-sdk 1.4.45__tar.gz → 1.4.46__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.45 → devops_bot_sdk-1.4.46}/PKG-INFO +1 -1
- {devops_bot_sdk-1.4.45 → devops_bot_sdk-1.4.46}/devops_bot_sdk.egg-info/PKG-INFO +1 -1
- {devops_bot_sdk-1.4.45 → devops_bot_sdk-1.4.46}/pyproject.toml +1 -1
- {devops_bot_sdk-1.4.45 → devops_bot_sdk-1.4.46}/sdk/__init__.py +2 -2
- {devops_bot_sdk-1.4.45 → devops_bot_sdk-1.4.46}/sdk/client.py +1 -1
- {devops_bot_sdk-1.4.45 → devops_bot_sdk-1.4.46}/sdk/ipc/handlers.py +21 -28
- {devops_bot_sdk-1.4.45 → devops_bot_sdk-1.4.46}/README.md +0 -0
- {devops_bot_sdk-1.4.45 → devops_bot_sdk-1.4.46}/devops_bot_sdk.egg-info/SOURCES.txt +0 -0
- {devops_bot_sdk-1.4.45 → devops_bot_sdk-1.4.46}/devops_bot_sdk.egg-info/dependency_links.txt +0 -0
- {devops_bot_sdk-1.4.45 → devops_bot_sdk-1.4.46}/devops_bot_sdk.egg-info/entry_points.txt +0 -0
- {devops_bot_sdk-1.4.45 → devops_bot_sdk-1.4.46}/devops_bot_sdk.egg-info/requires.txt +0 -0
- {devops_bot_sdk-1.4.45 → devops_bot_sdk-1.4.46}/devops_bot_sdk.egg-info/top_level.txt +0 -0
- {devops_bot_sdk-1.4.45 → devops_bot_sdk-1.4.46}/sdk/collectors/__init__.py +0 -0
- {devops_bot_sdk-1.4.45 → devops_bot_sdk-1.4.46}/sdk/collectors/files.py +0 -0
- {devops_bot_sdk-1.4.45 → devops_bot_sdk-1.4.46}/sdk/collectors/process.py +0 -0
- {devops_bot_sdk-1.4.45 → devops_bot_sdk-1.4.46}/sdk/collectors/screenshot.py +0 -0
- {devops_bot_sdk-1.4.45 → devops_bot_sdk-1.4.46}/sdk/config.py +0 -0
- {devops_bot_sdk-1.4.45 → devops_bot_sdk-1.4.46}/sdk/crucial.py +0 -0
- {devops_bot_sdk-1.4.45 → devops_bot_sdk-1.4.46}/sdk/exceptions.py +0 -0
- {devops_bot_sdk-1.4.45 → devops_bot_sdk-1.4.46}/sdk/git_ops.py +0 -0
- {devops_bot_sdk-1.4.45 → devops_bot_sdk-1.4.46}/sdk/graphify.py +0 -0
- {devops_bot_sdk-1.4.45 → devops_bot_sdk-1.4.46}/sdk/hooks/__init__.py +0 -0
- {devops_bot_sdk-1.4.45 → devops_bot_sdk-1.4.46}/sdk/hooks/crucial_guard.py +0 -0
- {devops_bot_sdk-1.4.45 → devops_bot_sdk-1.4.46}/sdk/ipc/__init__.py +0 -0
- {devops_bot_sdk-1.4.45 → devops_bot_sdk-1.4.46}/sdk/ipc/electron_bridge.py +0 -0
- {devops_bot_sdk-1.4.45 → devops_bot_sdk-1.4.46}/sdk/local_exec.py +0 -0
- {devops_bot_sdk-1.4.45 → devops_bot_sdk-1.4.46}/sdk/models/__init__.py +0 -0
- {devops_bot_sdk-1.4.45 → devops_bot_sdk-1.4.46}/sdk/models/envelope.py +0 -0
- {devops_bot_sdk-1.4.45 → devops_bot_sdk-1.4.46}/sdk/models/requests.py +0 -0
- {devops_bot_sdk-1.4.45 → devops_bot_sdk-1.4.46}/sdk/models/responses.py +0 -0
- {devops_bot_sdk-1.4.45 → devops_bot_sdk-1.4.46}/sdk/models/snapshots.py +0 -0
- {devops_bot_sdk-1.4.45 → devops_bot_sdk-1.4.46}/sdk/py.typed +0 -0
- {devops_bot_sdk-1.4.45 → devops_bot_sdk-1.4.46}/sdk/run_auto.py +0 -0
- {devops_bot_sdk-1.4.45 → devops_bot_sdk-1.4.46}/sdk/sse.py +0 -0
- {devops_bot_sdk-1.4.45 → devops_bot_sdk-1.4.46}/sdk/test.py +0 -0
- {devops_bot_sdk-1.4.45 → devops_bot_sdk-1.4.46}/sdk/test_pipeline.py +0 -0
- {devops_bot_sdk-1.4.45 → devops_bot_sdk-1.4.46}/sdk/updater.py +0 -0
- {devops_bot_sdk-1.4.45 → devops_bot_sdk-1.4.46}/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.46"
|
|
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.46
|
|
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.46"
|
|
34
34
|
__author__ = "AgentOS"
|
|
35
35
|
|
|
36
36
|
from sdk.client import BackendClient
|
|
@@ -653,18 +653,24 @@ async def _handle_story(
|
|
|
653
653
|
github_token=await client.github_token(),
|
|
654
654
|
)
|
|
655
655
|
prd = (gen.get("result") or "").strip() if gen.get("ok") else ""
|
|
656
|
-
if
|
|
656
|
+
if prd:
|
|
657
|
+
# PRD lives alongside the user story in the (now Task) description.
|
|
658
|
+
new_description = f"{user_story}\n\n---\n\n{_PRD_MARKER}\n\n{prd}"[:20000]
|
|
659
|
+
else:
|
|
660
|
+
# PRD generation failed — do NOT abandon the story: it must still become
|
|
661
|
+
# a Task (per "a Story once run should be changed into Task"). The PRD
|
|
662
|
+
# directive stays in humanInstructions, so the later coding run can still
|
|
663
|
+
# produce the PRD.md file.
|
|
657
664
|
reason = (gen.get("error") or "PRD generation produced no content")[:200]
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
665
|
+
await client.log_activity(
|
|
666
|
+
f"Story {jira_key}: PRD not pre-generated ({reason}) — converting to Task anyway"
|
|
667
|
+
)
|
|
661
668
|
await send(Envelope(
|
|
662
|
-
type=
|
|
663
|
-
data={"
|
|
669
|
+
type="step_update", thread_id=thread_id,
|
|
670
|
+
data={"jira_task_id": tid,
|
|
671
|
+
"current_step": f"Story {jira_key}: PRD generation skipped ({reason[:60]}) "
|
|
672
|
+
"— converting to Task"},
|
|
664
673
|
).model_dump())
|
|
665
|
-
return
|
|
666
|
-
# PRD lives alongside the user story in the (now Task) description.
|
|
667
|
-
new_description = f"{user_story}\n\n---\n\n{_PRD_MARKER}\n\n{prd}"[:20000]
|
|
668
674
|
|
|
669
675
|
# Convert Story → Task on the SAME ticket; leave it To Do so the next run codes
|
|
670
676
|
# it. humanInstructions are untouched (they still carry the location + any PRD
|
|
@@ -682,14 +688,15 @@ async def _handle_story(
|
|
|
682
688
|
).model_dump())
|
|
683
689
|
return
|
|
684
690
|
|
|
691
|
+
prd_in_desc = bool(new_description) or already_has_prd
|
|
685
692
|
await client.log_activity(
|
|
686
|
-
f"Story {jira_key}: converted to Task{' with PRD' if
|
|
693
|
+
f"Story {jira_key}: converted to Task{' with PRD' if prd_in_desc else ''} (To Do)"
|
|
687
694
|
)
|
|
688
695
|
await send(Envelope(
|
|
689
696
|
type="step_update", thread_id=thread_id,
|
|
690
697
|
data={"jira_task_id": tid,
|
|
691
698
|
"current_step": f"Story {jira_key} → Task (To Do)"
|
|
692
|
-
+ (" + PRD in description" if
|
|
699
|
+
+ (" + PRD in description" if prd_in_desc else "")
|
|
693
700
|
+ " — run again to implement"},
|
|
694
701
|
).model_dump())
|
|
695
702
|
|
|
@@ -2527,21 +2534,6 @@ async def handle_orchestrate_auto_local_run(
|
|
|
2527
2534
|
project_path = _resolve_local_project_path(task, payload)
|
|
2528
2535
|
ttype = str(task.get("type") or "").strip().lower()
|
|
2529
2536
|
|
|
2530
|
-
# User STORIES are for the ASSIGNED DEVELOPERS, not the bot: the default
|
|
2531
|
-
# auto-loop skips Story-type tickets and never marks them In Progress or
|
|
2532
|
-
# Done. (An explicit target — `agentos-auto ticket <KEY>`, i.e. only_keys
|
|
2533
|
-
# set — still lets the bot act on a Story: generate its PRD and convert
|
|
2534
|
-
# it to a Task.) Once a ticket is a TASK it is coded normally
|
|
2535
|
-
# (In Progress → Done), even when it descended from an Epic/Story.
|
|
2536
|
-
if ttype == "story" and not only_keys:
|
|
2537
|
-
await send(Envelope(
|
|
2538
|
-
type="step_update", thread_id=thread_id,
|
|
2539
|
-
data={"jira_task_id": tid,
|
|
2540
|
-
"current_step": f"({idx}/{total}) {jira_key}: skipped — user Story "
|
|
2541
|
-
f"left for the assigned developer"},
|
|
2542
|
-
).model_dump())
|
|
2543
|
-
continue
|
|
2544
|
-
|
|
2545
2537
|
await send(Envelope(
|
|
2546
2538
|
type="step_update", thread_id=thread_id,
|
|
2547
2539
|
data={"current_step": f"({idx}/{total}) {jira_key}: {task.get('summary', '')}".rstrip(": "),
|
|
@@ -2550,8 +2542,9 @@ async def handle_orchestrate_auto_local_run(
|
|
|
2550
2542
|
|
|
2551
2543
|
# Staged decomposition — an EPIC and a STORY are transformed, not coded:
|
|
2552
2544
|
# Epic → decompose into user Stories (To Do), mark Epic Done
|
|
2553
|
-
# Story → (optional PRD) + convert to Task (To Do)
|
|
2554
|
-
#
|
|
2545
|
+
# Story → (optional PRD) + ALWAYS convert to Task (To Do); a Story is
|
|
2546
|
+
# never marked In Progress/Done — only ever converted
|
|
2547
|
+
# Task → implemented by the normal pipeline below (In Progress → Done)
|
|
2555
2548
|
# Each is isolated: a failure must not abort the remaining queue.
|
|
2556
2549
|
if ttype in ("epic", "story"):
|
|
2557
2550
|
handler = _handle_epic if ttype == "epic" else _handle_story
|
|
File without changes
|
|
File without changes
|
{devops_bot_sdk-1.4.45 → devops_bot_sdk-1.4.46}/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
|