feat(profiles): add profile setup command endpoint and wrapper creation

This commit is contained in:
vincez-hms-coder 2026-04-27 18:35:16 -04:00
parent 3e200b64fb
commit ae11a31058
2 changed files with 81 additions and 0 deletions

View file

@ -2189,6 +2189,12 @@ def _resolve_profile_dir(name: str) -> Path:
return profiles_mod.get_profile_dir(name)
def _profile_setup_command(name: str) -> str:
"""Return the shell command used to configure a profile in the CLI."""
_resolve_profile_dir(name)
return "hermes setup" if name == "default" else f"{name} setup"
@app.get("/api/profiles")
async def list_profiles_endpoint():
from hermes_cli import profiles as profiles_mod
@ -2208,6 +2214,11 @@ async def create_profile_endpoint(body: ProfileCreate):
clone_from="default" if body.clone_from_default else None,
clone_config=body.clone_from_default,
)
# Match the CLI's profile-create flow: named profiles should get a
# wrapper in ~/.local/bin when the alias is safe to create.
collision = profiles_mod.check_alias_collision(body.name)
if not collision:
profiles_mod.create_wrapper_script(body.name)
except (ValueError, FileExistsError, FileNotFoundError) as e:
raise HTTPException(status_code=400, detail=str(e))
except Exception as e:
@ -2216,6 +2227,11 @@ async def create_profile_endpoint(body: ProfileCreate):
return {"ok": True, "name": body.name, "path": str(path)}
@app.get("/api/profiles/{name}/setup-command")
async def get_profile_setup_command(name: str):
return {"command": _profile_setup_command(name)}
@app.patch("/api/profiles/{name}")
async def rename_profile_endpoint(name: str, body: ProfileRename):
from hermes_cli import profiles as profiles_mod