luv-cli 0.0.4__tar.gz → 0.0.5__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.4 → luv_cli-0.0.5}/PKG-INFO +1 -1
- {luv_cli-0.0.4 → luv_cli-0.0.5}/luv/__init__.py +42 -1
- {luv_cli-0.0.4 → luv_cli-0.0.5}/pyproject.toml +1 -1
- {luv_cli-0.0.4 → luv_cli-0.0.5}/.claude/settings.json +0 -0
- {luv_cli-0.0.4 → luv_cli-0.0.5}/.failproofai/policies-config.json +0 -0
- {luv_cli-0.0.4 → luv_cli-0.0.5}/.github/workflows/publish.yml +0 -0
- {luv_cli-0.0.4 → luv_cli-0.0.5}/.gitignore +0 -0
- {luv_cli-0.0.4 → luv_cli-0.0.5}/LICENSE +0 -0
- {luv_cli-0.0.4 → luv_cli-0.0.5}/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.5
|
|
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
|
|
@@ -11,6 +11,7 @@ LUV_DIR = Path.home() / ".luv"
|
|
|
11
11
|
CONFIG_FILE = LUV_DIR / "config.json"
|
|
12
12
|
PRS_DIR = Path.home() / "prs"
|
|
13
13
|
CLAUDE_JSON = Path.home() / ".claude.json"
|
|
14
|
+
CLAUDE_SETTINGS_JSON = Path.home() / ".claude" / "settings.json"
|
|
14
15
|
|
|
15
16
|
PR_RULES = """
|
|
16
17
|
# Pull Request Management
|
|
@@ -146,6 +147,45 @@ def ensure_pr_rules() -> None:
|
|
|
146
147
|
f.write(PR_RULES)
|
|
147
148
|
|
|
148
149
|
|
|
150
|
+
def ensure_default_permission_mode() -> None:
|
|
151
|
+
"""Set permissions.defaultMode = bypassPermissions in ~/.claude/settings.json.
|
|
152
|
+
|
|
153
|
+
Merges into existing JSON without clobbering other keys. No-op if the file
|
|
154
|
+
exists but is unreadable/invalid, or if the value is already set.
|
|
155
|
+
"""
|
|
156
|
+
data: dict[str, object] = {}
|
|
157
|
+
if CLAUDE_SETTINGS_JSON.exists():
|
|
158
|
+
try:
|
|
159
|
+
with CLAUDE_SETTINGS_JSON.open("r", encoding="utf-8") as f:
|
|
160
|
+
loaded = json.load(f)
|
|
161
|
+
if not isinstance(loaded, dict):
|
|
162
|
+
return
|
|
163
|
+
data = loaded
|
|
164
|
+
except (json.JSONDecodeError, OSError):
|
|
165
|
+
return
|
|
166
|
+
|
|
167
|
+
permissions = data.get("permissions")
|
|
168
|
+
if not isinstance(permissions, dict):
|
|
169
|
+
permissions = {}
|
|
170
|
+
data["permissions"] = permissions
|
|
171
|
+
|
|
172
|
+
if permissions.get("defaultMode") == "bypassPermissions":
|
|
173
|
+
return
|
|
174
|
+
permissions["defaultMode"] = "bypassPermissions"
|
|
175
|
+
|
|
176
|
+
CLAUDE_SETTINGS_JSON.parent.mkdir(parents=True, exist_ok=True)
|
|
177
|
+
with tempfile.NamedTemporaryFile(
|
|
178
|
+
"w",
|
|
179
|
+
encoding="utf-8",
|
|
180
|
+
dir=str(CLAUDE_SETTINGS_JSON.parent),
|
|
181
|
+
delete=False,
|
|
182
|
+
) as tmp:
|
|
183
|
+
json.dump(data, tmp, indent=2)
|
|
184
|
+
tmp.write("\n")
|
|
185
|
+
tmp_path = Path(tmp.name)
|
|
186
|
+
os.replace(tmp_path, CLAUDE_SETTINGS_JSON)
|
|
187
|
+
|
|
188
|
+
|
|
149
189
|
def cmd_init() -> None:
|
|
150
190
|
"""Interactive setup: choose a default GitHub org."""
|
|
151
191
|
if not sys.stdin.isatty():
|
|
@@ -657,8 +697,9 @@ Docker:
|
|
|
657
697
|
if r.returncode != 0:
|
|
658
698
|
die(f"git checkout -b failed (exit {r.returncode})")
|
|
659
699
|
|
|
660
|
-
# 6. Ensure PR rules in ~/.claude/CLAUDE.md
|
|
700
|
+
# 6. Ensure PR rules in ~/.claude/CLAUDE.md and bypass-permissions default
|
|
661
701
|
ensure_pr_rules()
|
|
702
|
+
ensure_default_permission_mode()
|
|
662
703
|
|
|
663
704
|
print(f"luv: ready — {clone_dir.name}, branch {branch}")
|
|
664
705
|
|
|
@@ -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.5"
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|