luv-cli 0.0.1__tar.gz → 0.0.2__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.
- {luv_cli-0.0.1 → luv_cli-0.0.2}/PKG-INFO +1 -1
- {luv_cli-0.0.1 → luv_cli-0.0.2}/luv/__init__.py +31 -0
- {luv_cli-0.0.1 → luv_cli-0.0.2}/pyproject.toml +1 -1
- {luv_cli-0.0.1 → luv_cli-0.0.2}/.github/workflows/publish.yml +0 -0
- {luv_cli-0.0.1 → luv_cli-0.0.2}/LICENSE +0 -0
- {luv_cli-0.0.1 → luv_cli-0.0.2}/README.md +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: luv-cli
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.2
|
|
4
4
|
Summary: Launch Claude Code agents on GitHub repos with isolated workspaces and optional Docker dev environments
|
|
5
5
|
Project-URL: Homepage, https://github.com/exospherehost/luv
|
|
6
6
|
Project-URL: Repository, https://github.com/exospherehost/luv
|
|
@@ -398,6 +398,23 @@ def cmd_clean(force: bool = False) -> None:
|
|
|
398
398
|
print("luv: nothing to clean")
|
|
399
399
|
|
|
400
400
|
|
|
401
|
+
def find_latest_clone(repo: str) -> Path | None:
|
|
402
|
+
"""Return the highest-numbered local {repo}-{N} folder, or None."""
|
|
403
|
+
if not PRS_DIR.exists():
|
|
404
|
+
return None
|
|
405
|
+
best: Path | None = None
|
|
406
|
+
best_num = -1
|
|
407
|
+
for entry in PRS_DIR.iterdir():
|
|
408
|
+
if not entry.is_dir():
|
|
409
|
+
continue
|
|
410
|
+
parts = entry.name.rsplit("-", 1)
|
|
411
|
+
if len(parts) == 2 and parts[0] == repo and parts[1].isdigit():
|
|
412
|
+
n = int(parts[1])
|
|
413
|
+
if n > best_num:
|
|
414
|
+
best, best_num = entry, n
|
|
415
|
+
return best
|
|
416
|
+
|
|
417
|
+
|
|
401
418
|
def open_existing(org: str, repo: str, number: int, prompt: str | None, nav_mode: bool = False, resume_mode: bool = False) -> None:
|
|
402
419
|
"""Open an existing work folder or remote branch by number."""
|
|
403
420
|
clone_dir = PRS_DIR / f"{repo}-{number}"
|
|
@@ -506,6 +523,8 @@ Commands:
|
|
|
506
523
|
luv [org/]<repo> <number> [prompt] reopen an existing work folder by number
|
|
507
524
|
luv -l <PR URL> [prompt] open any GitHub PR by URL
|
|
508
525
|
luv [org/]<repo> -pr <number> [prompt] open a GitHub PR by repo + number
|
|
526
|
+
luv [org/]<repo> -n open shell in latest local clone
|
|
527
|
+
luv [org/]<repo> -r resume Claude in latest local clone
|
|
509
528
|
luv --clean [-f] delete fully-pushed work folders
|
|
510
529
|
|
|
511
530
|
Org resolution:
|
|
@@ -569,6 +588,18 @@ Docker:
|
|
|
569
588
|
org = resolve_org(explicit_org)
|
|
570
589
|
prompt = " ".join(args[1:]) if len(args) > 1 else None
|
|
571
590
|
|
|
591
|
+
# luv <repo> -n/-r → open latest local clone (no new workspace)
|
|
592
|
+
if (nav_mode or resume_mode) and not prompt:
|
|
593
|
+
clone_dir = find_latest_clone(repo)
|
|
594
|
+
if clone_dir is None:
|
|
595
|
+
die(f"no local clones of '{repo}' found in {PRS_DIR}")
|
|
596
|
+
print(f"luv: opening latest clone {clone_dir.name}")
|
|
597
|
+
if nav_mode:
|
|
598
|
+
navigate(clone_dir)
|
|
599
|
+
else:
|
|
600
|
+
resume(clone_dir)
|
|
601
|
+
return
|
|
602
|
+
|
|
572
603
|
# 1. Verify repo exists
|
|
573
604
|
r = run(["gh", "api", f"repos/{org}/{repo}"])
|
|
574
605
|
if r.returncode != 0:
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "luv-cli"
|
|
7
|
-
version = "0.0.
|
|
7
|
+
version = "0.0.2"
|
|
8
8
|
description = "Launch Claude Code agents on GitHub repos with isolated workspaces and optional Docker dev environments"
|
|
9
9
|
requires-python = ">=3.10"
|
|
10
10
|
license = "MIT"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|