steerdev 0.5.6__tar.gz → 0.5.7__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.
Files changed (67) hide show
  1. {steerdev-0.5.6 → steerdev-0.5.7}/PKG-INFO +1 -1
  2. {steerdev-0.5.6 → steerdev-0.5.7}/pyproject.toml +1 -1
  3. {steerdev-0.5.6 → steerdev-0.5.7}/src/steerdev_agent/cli.py +17 -1
  4. steerdev-0.5.7/src/steerdev_agent/update_check.py +67 -0
  5. {steerdev-0.5.6 → steerdev-0.5.7}/.github/workflows/pre-commit.yml +0 -0
  6. {steerdev-0.5.6 → steerdev-0.5.7}/.github/workflows/publish.yml +0 -0
  7. {steerdev-0.5.6 → steerdev-0.5.7}/.gitignore +0 -0
  8. {steerdev-0.5.6 → steerdev-0.5.7}/.pre-commit-config.yaml +0 -0
  9. {steerdev-0.5.6 → steerdev-0.5.7}/AGENTS.md +0 -0
  10. {steerdev-0.5.6 → steerdev-0.5.7}/CLAUDE.md +0 -0
  11. {steerdev-0.5.6 → steerdev-0.5.7}/README.md +0 -0
  12. {steerdev-0.5.6 → steerdev-0.5.7}/scripts/pre-commit-version-bump.sh +0 -0
  13. {steerdev-0.5.6 → steerdev-0.5.7}/src/steerdev_agent/__init__.py +0 -0
  14. {steerdev-0.5.6 → steerdev-0.5.7}/src/steerdev_agent/api/__init__.py +0 -0
  15. {steerdev-0.5.6 → steerdev-0.5.7}/src/steerdev_agent/api/activity.py +0 -0
  16. {steerdev-0.5.6 → steerdev-0.5.7}/src/steerdev_agent/api/agents.py +0 -0
  17. {steerdev-0.5.6 → steerdev-0.5.7}/src/steerdev_agent/api/client.py +0 -0
  18. {steerdev-0.5.6 → steerdev-0.5.7}/src/steerdev_agent/api/commands.py +0 -0
  19. {steerdev-0.5.6 → steerdev-0.5.7}/src/steerdev_agent/api/configs.py +0 -0
  20. {steerdev-0.5.6 → steerdev-0.5.7}/src/steerdev_agent/api/context.py +0 -0
  21. {steerdev-0.5.6 → steerdev-0.5.7}/src/steerdev_agent/api/events.py +0 -0
  22. {steerdev-0.5.6 → steerdev-0.5.7}/src/steerdev_agent/api/hooks.py +0 -0
  23. {steerdev-0.5.6 → steerdev-0.5.7}/src/steerdev_agent/api/implementation_plan.py +0 -0
  24. {steerdev-0.5.6 → steerdev-0.5.7}/src/steerdev_agent/api/messages.py +0 -0
  25. {steerdev-0.5.6 → steerdev-0.5.7}/src/steerdev_agent/api/prd.py +0 -0
  26. {steerdev-0.5.6 → steerdev-0.5.7}/src/steerdev_agent/api/runs.py +0 -0
  27. {steerdev-0.5.6 → steerdev-0.5.7}/src/steerdev_agent/api/sessions.py +0 -0
  28. {steerdev-0.5.6 → steerdev-0.5.7}/src/steerdev_agent/api/specs.py +0 -0
  29. {steerdev-0.5.6 → steerdev-0.5.7}/src/steerdev_agent/api/tasks.py +0 -0
  30. {steerdev-0.5.6 → steerdev-0.5.7}/src/steerdev_agent/api/workflow_runs.py +0 -0
  31. {steerdev-0.5.6 → steerdev-0.5.7}/src/steerdev_agent/api/workflows.py +0 -0
  32. {steerdev-0.5.6 → steerdev-0.5.7}/src/steerdev_agent/config/__init__.py +0 -0
  33. {steerdev-0.5.6 → steerdev-0.5.7}/src/steerdev_agent/config/models.py +0 -0
  34. {steerdev-0.5.6 → steerdev-0.5.7}/src/steerdev_agent/config/platform.py +0 -0
  35. {steerdev-0.5.6 → steerdev-0.5.7}/src/steerdev_agent/config/settings.py +0 -0
  36. {steerdev-0.5.6 → steerdev-0.5.7}/src/steerdev_agent/daemon.py +0 -0
  37. {steerdev-0.5.6 → steerdev-0.5.7}/src/steerdev_agent/executor/__init__.py +0 -0
  38. {steerdev-0.5.6 → steerdev-0.5.7}/src/steerdev_agent/executor/base.py +0 -0
  39. {steerdev-0.5.6 → steerdev-0.5.7}/src/steerdev_agent/executor/claude.py +0 -0
  40. {steerdev-0.5.6 → steerdev-0.5.7}/src/steerdev_agent/executor/stream.py +0 -0
  41. {steerdev-0.5.6 → steerdev-0.5.7}/src/steerdev_agent/handlers/__init__.py +0 -0
  42. {steerdev-0.5.6 → steerdev-0.5.7}/src/steerdev_agent/handlers/prd.py +0 -0
  43. {steerdev-0.5.6 → steerdev-0.5.7}/src/steerdev_agent/integration.py +0 -0
  44. {steerdev-0.5.6 → steerdev-0.5.7}/src/steerdev_agent/prompt/__init__.py +0 -0
  45. {steerdev-0.5.6 → steerdev-0.5.7}/src/steerdev_agent/prompt/builder.py +0 -0
  46. {steerdev-0.5.6 → steerdev-0.5.7}/src/steerdev_agent/prompt/templates.py +0 -0
  47. {steerdev-0.5.6 → steerdev-0.5.7}/src/steerdev_agent/py.typed +0 -0
  48. {steerdev-0.5.6 → steerdev-0.5.7}/src/steerdev_agent/runner.py +0 -0
  49. {steerdev-0.5.6 → steerdev-0.5.7}/src/steerdev_agent/setup/__init__.py +0 -0
  50. {steerdev-0.5.6 → steerdev-0.5.7}/src/steerdev_agent/setup/claude_setup.py +0 -0
  51. {steerdev-0.5.6 → steerdev-0.5.7}/src/steerdev_agent/setup/templates/claude_md_section.md +0 -0
  52. {steerdev-0.5.6 → steerdev-0.5.7}/src/steerdev_agent/setup/templates/settings.json +0 -0
  53. {steerdev-0.5.6 → steerdev-0.5.7}/src/steerdev_agent/setup/templates/skills/activity/SKILL.md +0 -0
  54. {steerdev-0.5.6 → steerdev-0.5.7}/src/steerdev_agent/setup/templates/skills/context/SKILL.md +0 -0
  55. {steerdev-0.5.6 → steerdev-0.5.7}/src/steerdev_agent/setup/templates/skills/git-workflow/SKILL.md +0 -0
  56. {steerdev-0.5.6 → steerdev-0.5.7}/src/steerdev_agent/setup/templates/skills/progress-logging/SKILL.md +0 -0
  57. {steerdev-0.5.6 → steerdev-0.5.7}/src/steerdev_agent/setup/templates/skills/specs-management/SKILL.md +0 -0
  58. {steerdev-0.5.6 → steerdev-0.5.7}/src/steerdev_agent/setup/templates/skills/task-management/SKILL.md +0 -0
  59. {steerdev-0.5.6 → steerdev-0.5.7}/src/steerdev_agent/setup/templates/steerdev.yaml +0 -0
  60. {steerdev-0.5.6 → steerdev-0.5.7}/src/steerdev_agent/version.py +0 -0
  61. {steerdev-0.5.6 → steerdev-0.5.7}/src/steerdev_agent/workflow/__init__.py +0 -0
  62. {steerdev-0.5.6 → steerdev-0.5.7}/src/steerdev_agent/workflow/executor.py +0 -0
  63. {steerdev-0.5.6 → steerdev-0.5.7}/src/steerdev_agent/workflow/memory.py +0 -0
  64. {steerdev-0.5.6 → steerdev-0.5.7}/tests/__init__.py +0 -0
  65. {steerdev-0.5.6 → steerdev-0.5.7}/tests/test_config.py +0 -0
  66. {steerdev-0.5.6 → steerdev-0.5.7}/tests/test_executor.py +0 -0
  67. {steerdev-0.5.6 → steerdev-0.5.7}/tests/test_prompt.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: steerdev
3
- Version: 0.5.6
3
+ Version: 0.5.7
4
4
  Summary: Backend task runner for steerdev.com - orchestrates CLI coding agents with activity reporting
5
5
  Project-URL: Homepage, https://github.com/pentoai/steerdev-agent
6
6
  Project-URL: Repository, https://github.com/pentoai/steerdev-agent
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "steerdev"
3
- version = "0.5.6"
3
+ version = "0.5.7"
4
4
  description = "Backend task runner for steerdev.com - orchestrates CLI coding agents with activity reporting"
5
5
  readme = "README.md"
6
6
  authors = [
@@ -12,6 +12,7 @@ from rich.console import Console
12
12
  from rich.panel import Panel
13
13
 
14
14
  from steerdev_agent.config.models import SteerDevConfig
15
+ from steerdev_agent.update_check import check_for_update
15
16
  from steerdev_agent.version import get_version
16
17
 
17
18
  console = Console()
@@ -1313,10 +1314,22 @@ def git_status() -> None:
1313
1314
  raise typer.Exit(1) from None
1314
1315
 
1315
1316
 
1317
+ def _print_update_notice(current: str) -> None:
1318
+ """Print an update notice if a newer version is available."""
1319
+ latest = check_for_update(current)
1320
+ if latest:
1321
+ console.print(
1322
+ f"\n[yellow]Update available: {current} → {latest}[/yellow]\n"
1323
+ f"Run [bold]uv tool install steerdev[/bold] to upgrade\n"
1324
+ )
1325
+
1326
+
1316
1327
  def version_callback(value: bool) -> None:
1317
1328
  """Print version and exit."""
1318
1329
  if value:
1319
- console.print(f"steerdev version {get_version()}")
1330
+ current = get_version()
1331
+ console.print(f"steerdev version {current}")
1332
+ _print_update_notice(current)
1320
1333
  raise typer.Exit()
1321
1334
 
1322
1335
 
@@ -1354,6 +1367,9 @@ def main(
1354
1367
  else:
1355
1368
  ctx.obj = SteerDevConfig()
1356
1369
 
1370
+ # Check for updates (non-blocking, cached)
1371
+ _print_update_notice(get_version())
1372
+
1357
1373
 
1358
1374
  @app.command()
1359
1375
  def run(
@@ -0,0 +1,67 @@
1
+ """Check for newer versions of steerdev on PyPI."""
2
+
3
+ import json
4
+ import time
5
+ from pathlib import Path
6
+
7
+ import httpx
8
+
9
+ PYPI_URL = "https://pypi.org/pypi/steerdev/json"
10
+ CACHE_FILE = Path.home() / ".cache" / "steerdev" / "update_check.json"
11
+ CHECK_INTERVAL = 3600 # 1 hour between checks
12
+
13
+
14
+ def _parse_version(v: str) -> tuple[int, ...]:
15
+ """Parse a version string into a tuple of ints for comparison."""
16
+ try:
17
+ return tuple(int(x) for x in v.split("."))
18
+ except (ValueError, AttributeError):
19
+ return (0,)
20
+
21
+
22
+ def _read_cache() -> dict | None:
23
+ """Read cached update check result."""
24
+ try:
25
+ if CACHE_FILE.exists():
26
+ data = json.loads(CACHE_FILE.read_text())
27
+ if time.time() - data.get("checked_at", 0) < CHECK_INTERVAL:
28
+ return data
29
+ except (json.JSONDecodeError, OSError):
30
+ pass
31
+ return None
32
+
33
+
34
+ def _write_cache(latest: str) -> None:
35
+ """Write update check result to cache."""
36
+ try:
37
+ CACHE_FILE.parent.mkdir(parents=True, exist_ok=True)
38
+ CACHE_FILE.write_text(json.dumps({"latest": latest, "checked_at": time.time()}))
39
+ except OSError:
40
+ pass
41
+
42
+
43
+ def get_latest_version() -> str | None:
44
+ """Fetch the latest version from PyPI. Returns None on failure."""
45
+ cached = _read_cache()
46
+ if cached:
47
+ return cached["latest"]
48
+
49
+ try:
50
+ resp = httpx.get(PYPI_URL, timeout=3)
51
+ resp.raise_for_status()
52
+ latest = resp.json()["info"]["version"]
53
+ _write_cache(latest)
54
+ return latest
55
+ except Exception:
56
+ return None
57
+
58
+
59
+ def check_for_update(current: str) -> str | None:
60
+ """Check if a newer version is available.
61
+
62
+ Returns the latest version string if an update is available, None otherwise.
63
+ """
64
+ latest = get_latest_version()
65
+ if latest and _parse_version(latest) > _parse_version(current):
66
+ return latest
67
+ return None
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes