fix: profile default workspace reads terminal.cwd; dropdown opens upward
1. _profile_default_workspace() now checks terminal.cwd Profile config.yaml files don't have a 'workspace' or 'default_workspace' key — they store the working directory as terminal.cwd (the hermes-agent CLI setting). Added it as the third fallback after 'workspace' and 'default_workspace', so switching to camanji correctly resolves ~/Camanji, webui resolves ~/webui-mvp, etc. 2. Workspace dropdown opens upward (bottom: calc(100% + 4px)) The dropdown is now anchored at the bottom of the sidebar. Opening it downward (top: 100%) caused it to clip off screen. Flipped to open upward with an upward shadow so it expands into the session list area instead. Tests: 426 passed, 0 failed.
This commit is contained in:
@@ -53,17 +53,31 @@ def _last_workspace_file() -> Path:
|
||||
def _profile_default_workspace() -> str:
|
||||
"""Read the profile's default workspace from its config.yaml.
|
||||
|
||||
Checks keys in priority order:
|
||||
1. 'workspace' — explicit webui workspace key
|
||||
2. 'default_workspace' — alternate explicit key
|
||||
3. 'terminal.cwd' — hermes-agent terminal working dir (most common)
|
||||
|
||||
Falls back to the boot-time DEFAULT_WORKSPACE constant.
|
||||
"""
|
||||
try:
|
||||
from api.profiles import get_active_hermes_home
|
||||
from api.config import get_config
|
||||
cfg = get_config()
|
||||
ws = cfg.get('default_workspace')
|
||||
if ws:
|
||||
p = Path(ws).expanduser().resolve()
|
||||
if p.is_dir():
|
||||
return str(p)
|
||||
# Explicit webui workspace keys first
|
||||
for key in ('workspace', 'default_workspace'):
|
||||
ws = cfg.get(key)
|
||||
if ws:
|
||||
p = Path(str(ws)).expanduser().resolve()
|
||||
if p.is_dir():
|
||||
return str(p)
|
||||
# Fall through to terminal.cwd — the agent's configured working directory
|
||||
terminal_cfg = cfg.get('terminal', {})
|
||||
if isinstance(terminal_cfg, dict):
|
||||
cwd = terminal_cfg.get('cwd', '')
|
||||
if cwd and str(cwd) not in ('.', ''):
|
||||
p = Path(str(cwd)).expanduser().resolve()
|
||||
if p.is_dir():
|
||||
return str(p)
|
||||
except (ImportError, Exception):
|
||||
pass
|
||||
return str(_BOOT_DEFAULT_WORKSPACE)
|
||||
|
||||
@@ -345,7 +345,7 @@
|
||||
|
||||
/* ── Workspace dropdown (topbar) ── */
|
||||
.ws-chip{user-select:none;}
|
||||
.ws-dropdown{display:none;position:absolute;top:calc(100% + 4px);left:0;right:0;min-width:200px;background:#1a2535;border:1px solid var(--border2);border-radius:10px;box-shadow:0 8px 24px rgba(0,0,0,.4);z-index:200;overflow:hidden;max-height:320px;overflow-y:auto;}
|
||||
.ws-dropdown{display:none;position:absolute;bottom:calc(100% + 4px);left:0;right:0;min-width:200px;background:#1a2535;border:1px solid var(--border2);border-radius:10px;box-shadow:0 -4px 24px rgba(0,0,0,.4);z-index:200;overflow:hidden;max-height:320px;overflow-y:auto;}
|
||||
.ws-dropdown.open{display:block;}
|
||||
.ws-opt{padding:9px 14px;cursor:pointer;transition:background .12s;}
|
||||
.ws-opt:hover{background:rgba(255,255,255,.07);}
|
||||
|
||||
Reference in New Issue
Block a user