a21f2358c6
tracker-policy-pr / check-pr (pull_request) Successful in 16s
test / integration-docker (pull_request) Successful in 21s
lint / lint (push) Failing after 58s
test / unit (pull_request) Successful in 2m11s
test / integration-firecracker (pull_request) Successful in 3m27s
test / coverage (pull_request) Successful in 16s
test / publish-infra (pull_request) Has been skipped
_common had rotted into a junk drawer. Trim it to what actually
justifies a shared leaf module and rename for legibility:
* REPO_DIR: deleted (dead — nothing imported it).
* read_tty_line: dropped the pointless re-export; cleanup/start/init
now import it straight from bot_bottle.util.
* USER_CWD: deleted. It captured os.getcwd() at import time, but
nothing chdirs and no test patched it, so it was equivalent to a
live os.getcwd() — inlined at the six call sites.
* PROG: kept, now the sole member. It's still a leaf (both the
dispatcher and the commands it imports need it) so it can't move
into __init__ without a circular import.
_common.py -> constants.py. Full unit suite green (2243); CLI dispatch
verified.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
44 lines
1.2 KiB
Python
44 lines
1.2 KiB
Python
"""edit: open an agent in vim for editing."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import argparse
|
|
import json
|
|
import os
|
|
from pathlib import Path
|
|
|
|
from ...log import die
|
|
from ..constants import PROG
|
|
|
|
|
|
def cmd_edit(argv: list[str]) -> int:
|
|
parser = argparse.ArgumentParser(prog=f"{PROG} edit", add_help=True)
|
|
parser.add_argument("scope", choices=["user", "project"])
|
|
parser.add_argument("name")
|
|
args = parser.parse_args(argv)
|
|
|
|
if args.scope == "user":
|
|
target_file = Path(os.environ["HOME"]) / "bot-bottle.json"
|
|
else:
|
|
target_file = Path(os.getcwd()) / "bot-bottle.json"
|
|
|
|
if not target_file.is_file():
|
|
die(f"{target_file} does not exist")
|
|
|
|
try:
|
|
doc = json.loads(target_file.read_text())
|
|
except json.JSONDecodeError:
|
|
die(f"{target_file} is not valid JSON")
|
|
|
|
if args.name not in (doc.get("agents") or {}):
|
|
die(f"agent '{args.name}' not found in {target_file}")
|
|
|
|
line = 1
|
|
text = target_file.read_text().splitlines()
|
|
needle = f'"{args.name}"'
|
|
for idx, l in enumerate(text, start=1):
|
|
if needle in l:
|
|
line = idx
|
|
break
|
|
os.execvp("vim", ["vim", f"+{line}", str(target_file)])
|