HERMES-GIELIE/api
nesquena-hermes 0562bdbd31 fix(#4933): one-click extension install works with no env (bootstrap managed default root)
Settings -> Extensions offered an Install button even when extensions were
unconfigured, then dead-ended on 'Extensions not configured' because
install_extension required HERMES_WEBUI_EXTENSION_DIR to be set to an existing
directory. Default to a WebUI-managed root under STATE_DIR/extensions and
bootstrap it on first install so install just works with zero config; the env
var remains an optional override (never auto-created). Gallery-installed
extensions already auto-load via the runtime manifest, so the extension loads
on the next app-shell render with no further setup.

- api/extensions.py: _default_extension_root + _writable_extension_root;
  _extension_root/_extension_root_status fall back to the managed default;
  install_extension bootstraps via _writable_extension_root; dir-unavailable
  warning only fires for an explicitly-set-but-broken env path.
- tests: update disabled-by-default expectations (configured=True, valid=False
  pre-install) + new regression proving install bootstraps + auto-loads with
  no env.
- docs/EXTENSIONS.md: document zero-config one-click install + env now optional.
- CHANGELOG [Unreleased].
2026-06-25 18:45:09 +00:00
..
__init__.py
agent_health.py
agent_sessions.py fix(#4385): keep archived cron sessions hidden after list refresh 2026-06-18 00:28:02 +00:00
auth.py
background.py
background_process.py fix(#4912): deliver async_delegation completions to the parent chat 2026-06-25 11:38:02 +00:00
clarify.py stage #4524: clarify 409-terminal (id-guarded, loading-cleared) + SSE-notify on expiry (#4504) + v0.51.534 CHANGELOG 2026-06-20 05:36:56 +00:00
commands.py
compression_anchor.py
config.py fix(#4728): clear stale custom:* base_url + default wins without loaded session (gate findings) 2026-06-24 20:17:29 +00:00
dashboard_probe.py
extensions.py fix(#4933): one-click extension install works with no env (bootstrap managed default root) 2026-06-25 18:45:09 +00:00
gateway_chat.py fix(#4550): harden gateway reasoning forwarding follow-up 2026-06-20 18:44:25 +00:00
gateway_watcher.py Release PF (v0.51.445): scope gateway watcher to active profile (#2848) (#4275) 2026-06-15 15:41:21 -07:00
goals.py
helpers.py Release v0.51.564 — loopback sidecar diagnostics (#4612) (#4632) 2026-06-21 13:07:32 -07:00
kanban_bridge.py rebase(#2814): resolve i18n onto current master + add kanban_view_* keys to all 13 locales 2026-06-23 23:40:45 +00:00
metering.py
models.py docs: clarify _INDEX_WRITE_LOCK serializes the on-disk index RMW (Opus gate nicety) 2026-06-25 16:03:36 +00:00
oauth.py Avoid blocking OAuth flow lock during Codex start 2026-06-17 00:20:49 +00:00
onboarding.py
passkeys.py
paths.py
plugin_providers.py
plugins.py
profiles.py fix(#4783): prune dependency trees in mtime probe to match compute path (gate finding 4) 2026-06-24 21:27:22 +00:00
providers.py fix(#3961): complete credential scrub with non-registry agent creds (CUSTOM_API_KEY, AWS/Bedrock) 2026-06-22 19:19:56 +00:00
request_diagnostics.py
rollback.py fix(#4410): pre-check workspace leaf type via lstat + close fd on non-regular (Codex gate v2) 2026-06-18 19:22:29 +00:00
route_approvals.py
routes.py fix(#4771): keep gateway approval failures actionable 2026-06-25 13:09:42 +00:00
run_journal.py
runner_client.py fix(gateway): correct approval URL and thread session history into runs API (#4479) 2026-06-19 13:16:39 -04:00
runtime_adapter.py
session_discoverability.py
session_events.py feat(sessions): carry changed session_id in session-list-changed events (#4221) (#4233) 2026-06-15 00:10:01 -07:00
session_lifecycle.py
session_ops.py fix(#4767): review fixes - more edge cases 2026-06-24 18:08:50 +00:00
session_recovery.py
skill_usage.py
sse_chunked.py stage #4447: opt-in chunked SSE for buffering proxies (#4447) + v0.51.524 CHANGELOG 2026-06-19 22:09:17 +00:00
startup.py
state_sync.py
streaming.py fix(#4928): don't cap tool-call content args to 120 chars 2026-06-25 18:18:17 +00:00
system_health.py
terminal.py
todo_state.py
turn_journal.py
updates.py fix(#4914): don't abort force update when git clean -fd fails 2026-06-25 11:13:57 +00:00
upload.py fix(voice): recognize command STT providers in capability probe (#4312) 2026-06-16 17:21:11 +00:00
usage.py
webui_session_db.py fix(#4767): review fixes - more edge cases 2026-06-24 18:08:50 +00:00
workspace.py Prevent stale escape errors from collapsing live browse grants 2026-06-23 02:53:12 -04:00
workspace_git.py release: v0.51.506 — harden destructive workspace Git paths vs repo-local execution (#3879, #3777) 2026-06-19 02:14:13 +00:00
worktrees.py