HERMES-GIELIE/api
nesquena-hermes 58ba991c0d feat(extensions): opt-in CSP frame-src allowlist (HERMES_WEBUI_CSP_FRAME_EXTRA)
Adds a configurable frame-src directive so an extension can embed a
self-hosted web app in an iframe (e.g. an 'external app tab' pinning
Grafana / Vaultwarden / a dashboard). Mirrors the existing
HERMES_WEBUI_CSP_CONNECT_EXTRA knob: space-separated http(s) origins with
optional *.subdomain wildcard + port, validated, ignored if malformed
(directive-injection / paths / ws scheme / bad ports all rejected).

- Default frame-src is 'self' only, so existing same-origin iframes are
  unchanged; default-off when the env var is unset.
- frame-ancestors stays 'none' -- this only governs what THIS page may embed,
  never who may embed the WebUI.
- Threaded through both the enforced and report-only CSP builders + the
  server.py Handler wrapper, so both headers stay identical.

Docs in docs/EXTENSIONS.md. 8 new regression tests
(tests/test_csp_frame_src_extra.py) cover default, valid widening, enforced
parity, directive-injection rejection, path/ws/port rejection, and
connect/frame independence. Existing CSP test suite still green.

Note: full suite shows 2 pre-existing order-dependent flakes
(test_issue1574 spawn-context, test_issue3283 import-order) that pass in
isolation and are untouched by this CSP-only diff.
2026-06-28 04:08:04 +00:00
..
__init__.py
agent_health.py fix(agent_health): read cross-container gateway runtime status from gateway_state.json (#5065) 2026-06-27 19:54:50 +00:00
agent_sessions.py fix(sidebar): restrict cron pre-aggregation to missing-index scans 2026-06-26 03:06:40 +00:00
auth.py fix(#5022): keep corrupt auth state from bricking startup 2026-06-27 01:58:40 +00:00
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 feat(moa): route /moa through WebUI via server-resolved MoA config (#5070, #5057) 2026-06-28 00:23:51 +00:00
compression_anchor.py Address compaction marker and redaction review 2026-06-26 00:12:09 +00:00
config.py feat(settings): expose max_tokens override in Settings (#5010) 2026-06-27 20:27:18 +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(streaming): strip consumed OOB steer blocks from model-facing history (#4978) 2026-06-27 19:13:36 +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 feat(extensions): opt-in CSP frame-src allowlist (HERMES_WEBUI_CSP_FRAME_EXTRA) 2026-06-28 04:08:04 +00: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 fix(webui): hold per-session lock for state.db sidecar self-heal (TOCTOU + clobber) 2026-06-27 15:24:15 +00:00
oauth.py Avoid blocking OAuth flow lock during Codex start 2026-06-17 00:20:49 +00:00
onboarding.py
passkeys.py Release v0.51.270 — Release IL (stage-u1 — un-hold batch: #3517 #3624 #3613) (#3674) 2026-06-05 11:35:26 -07:00
paths.py fix(profiles): avoid config import cycle 2026-06-01 05:05:16 +00:00
plugin_providers.py Release v0.51.270 — Release IL (stage-u1 — un-hold batch: #3517 #3624 #3613) (#3674) 2026-06-05 11:35:26 -07:00
plugins.py fix(#2622): plugin card UX — legible Open button, single badge, visible toggle + reject protocol-relative tab.path 2026-06-02 03:58:02 +00:00
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 fix(#4973): replace per-request diagnostics Timer with a process-global watchdog thread 2026-06-26 07:58:13 +00:00
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 fix(#5000): relay mirrored gateway approvals after stream loss 2026-06-27 06:03:24 +00:00
route_session_list_cache.py Keep session cache invalidation signals live across the routes extraction 2026-06-26 18:36:07 +00:00
routes.py feat(moa): route /moa through WebUI via server-resolved MoA config (#5070, #5057) 2026-06-28 00:23:51 +00:00
run_journal.py fix(streaming): tighten tool limit terminal guards 2026-06-12 10:03:31 +08:00
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 Merge PR #3048 2026-05-28 17:47:33 +00:00
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 Release v0.51.256 — Release HX (stage-r4) (#3596) 2026-06-04 12:28:06 -07:00
session_ops.py fix(#4767): review fixes - more edge cases 2026-06-24 18:08:50 +00:00
session_recovery.py fix(anchor): preserve settled mixed content order (#4958) 2026-06-27 22:54:29 +00:00
skill_usage.py fix: remove webui-side writer to avoid conflict with agent 2026-05-27 20:57:32 +08:00
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 fix: use Optional[T] for default None parameters in state_sync.py 2026-06-01 17:20:17 +00:00
streaming.py feat(moa): route /moa through WebUI via server-resolved MoA config (#5070, #5057) 2026-06-28 00:23:51 +00:00
system_health.py fix: keep psutil optional for system health 2026-06-26 20:49:13 +00:00
terminal.py Release v0.51.304 — Release JT (stage-p2a — un-held terminal reaper + opt-in Docker GPU) (#3757) 2026-06-06 18:04:16 -07:00
todo_state.py Release v0.51.261 — Release IC (stage-r11) (#3616) 2026-06-04 16:46:20 -07:00
turn_journal.py Release v0.51.326 — Release KP (#3618 + #3802 + #3762 + #3810) (#3816) 2026-06-07 23:18:51 -07:00
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