Skip to content

Commit 34d7e97

Browse files
committed
feat: release version 2.3.0 with new autonomous missions capabilities
- Introduced the `devsper.missions` package for long-horizon autonomous execution across various workflows. - Added mission planner, agents for research and coding workflows, and an iteration engine for quality-driven execution. - Implemented mission memory for persisting findings and decisions, along with support for long-running missions. - Enhanced the SDK by exporting `MissionRunner` for easier mission execution and added runtime tests for mission planning. - Updated the TUI to include mission execution paths and a dashboard for mission progress visualization.
1 parent 0b36f8d commit 34d7e97

26 files changed

Lines changed: 769 additions & 3 deletions

CHANGELOG.md

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,24 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## [Unreleased]
99

10+
## [2.3.0] — 2026-03-30
11+
12+
### Added
13+
14+
- **Autonomous Missions capability layer** — New `devsper.missions` package for long-horizon autonomous execution across research, coding, and experiment workflows.
15+
- **Mission planner and DAG generation** — Added `missions/mission_planner.py` to break goals into mission tasks, assign role agents, and define dependency graphs.
16+
- **Research mission workflow** — Added mission agents (`researcher_agent`, `reviewer_agent`, `writer_agent`, `editor_agent`) and end-to-end flow: research → critique → improve → finalize.
17+
- **Coding mission workflow** — Added mission agents (`architect_agent`, `coder_agent`, `tester_agent`, `debugger_agent`, `docs_agent`) and end-to-end flow: design → code → test → fix → document.
18+
- **Iteration engine** — Added `missions/iteration_loop.py` for quality-threshold-driven iterative execution with critique/improvement cycles.
19+
- **Mission memory** — Added `missions/mission_memory.py` to persist research findings, decisions, and experiment artifacts per mission.
20+
- **Long-running mission support** — Added checkpointing/resume support in `missions/mission_runner.py` plus HITL task-gating callback support.
21+
- **Mission UI** — Added dashboard `MissionView` and TUI mission execution path (`mission:research ...`, `mission:coding ...`, `mission:experiment ...`) to show goal, DAG, and iteration progress.
22+
23+
### Changed
24+
25+
- **SDK surface** — Exported `MissionRunner` from `devsper` package root for straightforward mission execution from Python.
26+
- **Testing** — Added runtime tests for mission DAG planning and checkpoint creation.
27+
1028
## [2.2.0] — 2026-03-28
1129

1230
### Added

devsper/__init__.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020

2121
from devsper.config import get_config
2222

23-
__all__ = ["Swarm", "get_config", "__version__"]
23+
__all__ = ["Swarm", "MissionRunner", "get_config", "__version__"]
2424

2525

2626
def __getattr__(name: str):
@@ -29,4 +29,8 @@ def __getattr__(name: str):
2929
from devsper.swarm.swarm import Swarm # local import
3030

3131
return Swarm
32+
if name == "MissionRunner":
33+
from devsper.missions import MissionRunner # local import
34+
35+
return MissionRunner
3236
raise AttributeError(name)

devsper/missions/__init__.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
from devsper.missions.iteration_loop import IterationEngine
2+
from devsper.missions.mission_memory import MissionMemory
3+
from devsper.missions.mission_planner import MissionPlanner
4+
from devsper.missions.mission_runner import MissionResult, MissionRunner
5+
from devsper.missions.models import MissionDAG, MissionTask, MissionType
6+
7+
__all__ = [
8+
"IterationEngine",
9+
"MissionMemory",
10+
"MissionPlanner",
11+
"MissionRunner",
12+
"MissionResult",
13+
"MissionDAG",
14+
"MissionTask",
15+
"MissionType",
16+
]

devsper/missions/base_agent.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
from __future__ import annotations
2+
3+
from dataclasses import dataclass
4+
5+
from devsper.utils.models import generate
6+
7+
8+
@dataclass(slots=True)
9+
class MissionAgent:
10+
name: str
11+
role_prompt: str
12+
model_name: str = "auto"
13+
14+
def run(self, goal: str, current: str = "", context: str = "") -> str:
15+
prompt = (
16+
f"{self.role_prompt}\n\n"
17+
f"Goal:\n{goal}\n\n"
18+
f"Current Draft:\n{current}\n\n"
19+
f"Context:\n{context}\n\n"
20+
"Return a concrete, high-quality output."
21+
)
22+
return (generate(self.model_name, prompt) or "").strip()
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
from devsper.missions.coding.architect_agent import ArchitectAgent
2+
from devsper.missions.coding.coder_agent import CoderAgent
3+
from devsper.missions.coding.tester_agent import TesterAgent
4+
from devsper.missions.coding.debugger_agent import DebuggerAgent
5+
from devsper.missions.coding.docs_agent import DocsAgent
6+
7+
__all__ = [
8+
"ArchitectAgent",
9+
"CoderAgent",
10+
"TesterAgent",
11+
"DebuggerAgent",
12+
"DocsAgent",
13+
]
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
from devsper.missions.base_agent import MissionAgent
2+
3+
4+
class ArchitectAgent(MissionAgent):
5+
def __init__(self, model_name: str = "auto") -> None:
6+
super().__init__(
7+
name="architect_agent",
8+
role_prompt="You are an architect agent. Produce robust design and implementation plan.",
9+
model_name=model_name,
10+
)
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
from devsper.missions.base_agent import MissionAgent
2+
3+
4+
class CoderAgent(MissionAgent):
5+
def __init__(self, model_name: str = "auto") -> None:
6+
super().__init__(
7+
name="coder_agent",
8+
role_prompt="You are a coder agent. Implement working, maintainable code.",
9+
model_name=model_name,
10+
)
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
from devsper.missions.base_agent import MissionAgent
2+
3+
4+
class DebuggerAgent(MissionAgent):
5+
def __init__(self, model_name: str = "auto") -> None:
6+
super().__init__(
7+
name="debugger_agent",
8+
role_prompt="You are a debugger agent. Diagnose failures and provide concrete fixes.",
9+
model_name=model_name,
10+
)
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
from devsper.missions.base_agent import MissionAgent
2+
3+
4+
class DocsAgent(MissionAgent):
5+
def __init__(self, model_name: str = "auto") -> None:
6+
super().__init__(
7+
name="docs_agent",
8+
role_prompt="You are a docs agent. Produce clear setup, usage, and maintenance docs.",
9+
model_name=model_name,
10+
)
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
from devsper.missions.base_agent import MissionAgent
2+
3+
4+
class TesterAgent(MissionAgent):
5+
def __init__(self, model_name: str = "auto") -> None:
6+
super().__init__(
7+
name="tester_agent",
8+
role_prompt="You are a tester agent. Validate behavior and identify failing cases.",
9+
model_name=model_name,
10+
)

0 commit comments

Comments
 (0)