Skip to content

Commit d839c0b

Browse files
committed
release: bump version to 2.2.0 and add new features
- Updated version to 2.2.0 in pyproject.toml and lock files. - Introduced the supermemory ranking backend for enhanced memory retrieval. - Added support for platform memory backends and remote platform workflows. - Implemented a local worker pool manager and Devsper Cloud CLI commands for improved cloud interaction. - Expanded OpenTelemetry configuration and updated documentation to reflect new features.
1 parent 5eb2271 commit d839c0b

5 files changed

Lines changed: 84 additions & 3 deletions

File tree

CHANGELOG.md

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

88
## [Unreleased]
99

10+
## [2.2.0] — 2026-03-28
11+
12+
### Added
13+
14+
- **Supermemory ranking backend**`[memory] backend = "supermemory"` (default) uses the Rust `supermemory-core` ranker for hybrid lexical (+ optional embedding) memory retrieval, deduplication, and recency-aware context formatting.
15+
- **Platform memory backends**`[memory] backend` can be `platform` or `hybrid` with `platform_api_url` and `platform_org_slug`; config resolver honors `DEVSPER_PLATFORM_API_URL` and `DEVSPER_PLATFORM_ORG` when set.
16+
- **Remote platform workflows**`load_workflow("org/pkg@N")` fetches workflow specs from the Devsper Platform API when `DEVSPER_PLATFORM_API_URL`, `DEVSPER_PLATFORM_ORG`, and (when required) `DEVSPER_PLATFORM_TOKEN` are configured.
17+
- **Local worker pool**`devsper pool` subcommands to run the local worker pool manager (foreground spawner) alongside improved swarm execution when using pool-backed paths.
18+
- **Devsper Cloud CLI**`devsper cloud login`, `logout`, `run`, `status`, and `logs` for JWT authentication (OS keychain) and runs against the platform API.
19+
20+
### Changed
21+
22+
- **Telemetry** — OpenTelemetry configuration and OTLP export wiring expanded (`otel_endpoint`, `otel_headers`, and related options).
23+
- **Documentation** — README refresh; removed outdated standalone docs where superseded by the current `docs/` tree.
24+
1025
## [2.1.8] — 2026-03-24
1126

1227
### Changed

devsper/__init__.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,19 @@
88
result = swarm.run("analyze diffusion models")
99
"""
1010

11+
try:
12+
from importlib.metadata import version as _package_version
13+
except ImportError: # pragma: no cover
14+
_package_version = None # type: ignore[misc, assignment]
15+
16+
try:
17+
__version__ = _package_version("devsper") if _package_version else "0.0.0"
18+
except Exception: # pragma: no cover - missing dist metadata (e.g. bare checkout)
19+
__version__ = "0.0.0"
20+
1121
from devsper.config import get_config
1222

13-
__all__ = ["Swarm", "get_config"]
23+
__all__ = ["Swarm", "get_config", "__version__"]
1424

1525

1626
def __getattr__(name: str):

devsper/cli/main.py

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2510,6 +2510,36 @@ def _run_simulate(args: object) -> int:
25102510
return 1
25112511

25122512

2513+
def _run_version(args: object) -> int:
2514+
"""Print installed devsper version. With global ``--json``, emit a small JSON object."""
2515+
import platform
2516+
2517+
try:
2518+
from devsper import __version__ as ver_mod
2519+
2520+
ver = str(ver_mod)
2521+
except Exception:
2522+
try:
2523+
from importlib.metadata import version
2524+
2525+
ver = version("devsper")
2526+
except Exception:
2527+
ver = "unknown"
2528+
if getattr(args, "json_output", False):
2529+
print(
2530+
json.dumps(
2531+
{
2532+
"version": ver,
2533+
"python": sys.version.split()[0],
2534+
"platform": platform.system(),
2535+
}
2536+
)
2537+
)
2538+
else:
2539+
print(f"devsper {ver}")
2540+
return 0
2541+
2542+
25132543
def _run_health(args: object) -> int:
25142544
"""Run health checks. Exit 0 if healthy, 1 otherwise. Print ✓/✗ per check."""
25152545
import asyncio
@@ -2662,6 +2692,19 @@ def main() -> int:
26622692
except ImportError:
26632693
pass
26642694
global_grp = parser.add_argument_group("Global options")
2695+
try:
2696+
from devsper import __version__ as _cli_pkg_version
2697+
2698+
_cli_version_str = str(_cli_pkg_version)
2699+
except Exception:
2700+
_cli_version_str = "unknown"
2701+
global_grp.add_argument(
2702+
"-V",
2703+
"--version",
2704+
action="version",
2705+
version=f"%(prog)s {_cli_version_str}",
2706+
help="Print devsper version and exit",
2707+
)
26652708
global_grp.add_argument(
26662709
"--debug", action="store_true", help="Enable DEBUG log level"
26672710
)
@@ -3699,6 +3742,19 @@ def main() -> int:
36993742
)
37003743
simulate_parser.set_defaults(func=_run_simulate)
37013744

3745+
version_parser = subparsers.add_parser(
3746+
"version",
3747+
help="Print devsper version",
3748+
description="Print the installed devsper package version. Use global --json for machine-readable output.",
3749+
epilog="""
3750+
Examples:
3751+
devsper version
3752+
devsper --json version
3753+
""",
3754+
formatter_class=argparse.RawDescriptionHelpFormatter,
3755+
)
3756+
version_parser.set_defaults(func=_run_version)
3757+
37023758
health_parser = subparsers.add_parser(
37033759
"health",
37043760
help="Health and readiness check",

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ packages = ["devsper"]
77

88
[project]
99
name = "devsper"
10-
version = "2.1.8"
10+
version = "2.2.0"
1111
description = "Orchestrate distributed swarms of AI agents that collaboratively solve complex tasks."
1212
readme = "README.md"
1313
license = "GPL-3.0-or-later"

uv.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)