Commit graph

2007 commits

Author SHA1 Message Date
Hermes Agent
fe3f810b56 stage-346: apply Opus SHOULD-FIX (defense-in-depth) — scope /api/csp-report auth bypass to POST only
Opus advisor flagged that PR #2160's CSP-report auth carve-out covered all
write methods on the path, not just POST. Currently harmless (PATCH/DELETE
fall through to CSRF 403 or routing 404), but defense-in-depth — scope the
bypass to its actual use case.

CSP report regression suite (6 tests) still passes.
2026-05-13 07:15:53 +00:00
Hermes Agent
55047e19e7 docs: CHANGELOG stage-346 — close v0.51.52, open Unreleased for 10-PR contributor batch 2026-05-13 06:57:22 +00:00
Hermes Agent
afe42b96c1 Merge pull request #2156 into stage-346
Issue #2057 Slice 2: Add guarded worktree remove action
2026-05-13 06:56:25 +00:00
Hermes Agent
cc1df0c6c7 Merge pull request #2166 into stage-346
Consolidate session post-render processing

# Conflicts:
#	CHANGELOG.md
2026-05-13 06:56:24 +00:00
Hermes Agent
2a9d011022 Merge pull request #2160 into stage-346
Add CSP report collector endpoint (closes #2095)
2026-05-13 06:56:22 +00:00
Hermes Agent
4109394cdf Merge pull request #2159 into stage-346
Fix stale stream state in session list (closes #2157)

# Conflicts:
#	CHANGELOG.md
2026-05-13 06:56:21 +00:00
Hermes Agent
7b866df79a Merge pull request #2170 into stage-346
Skip CLI metadata lookup for native session loads

# Conflicts:
#	CHANGELOG.md
2026-05-13 06:56:20 +00:00
Hermes Agent
e665d36847 Merge pull request #2161 into stage-346
Localize logs severity filters (closes #2098)

# Conflicts:
#	CHANGELOG.md
2026-05-13 06:56:18 +00:00
Hermes Agent
129e42873c Merge pull request #2158 into stage-346
Fix stale stream exception writeback guards (closes #2154)

# Conflicts:
#	CHANGELOG.md
2026-05-13 06:56:17 +00:00
Hermes Agent
dcbced9357 Merge pull request #2173 into stage-346
Fix ctl Python wrapper ownership (closes #2172)
2026-05-13 06:56:16 +00:00
Hermes Agent
7e88ba391a Merge pull request #2175 into stage-346
Soften session lineage count badge (refs #2155)
2026-05-13 06:56:14 +00:00
Hermes Agent
77cebdfdd2 Merge pull request #2176 into stage-346
fix: handle dict model entries in provider models list
2026-05-13 06:56:13 +00:00
MrFant
a4417d11f9 fix: handle dict model entries in provider models list
When a provider's 'models' config contains dicts (e.g. {"id": "x", "label": "y"})
instead of plain strings, _apply_provider_prefix() crashes with:
  AttributeError: 'dict' object has no attribute 'startswith'

This happens because the list comprehension at line 3505 passes the raw dict
as the model ID. The fix extracts 'id' and 'label' from dict entries while
keeping string entries as-is.

Fixes the /api/models and /api/onboarding/status 500 errors.
2026-05-13 13:49:40 +08:00
Michael Lam
29f5dea835 Soften session lineage count badge 2026-05-12 22:41:41 -07:00
Frank Song
d5dda03ec2 Fix ctl Python wrapper ownership 2026-05-13 13:09:42 +08:00
Frank Song
e78945e7ca Skip CLI metadata lookup for native sessions 2026-05-13 12:35:12 +08:00
Frank Song
02ca306ffc Consolidate session post-render processing 2026-05-13 11:50:31 +08:00
Frank Song
f1ca07c186 Localize logs severity filters 2026-05-13 10:55:59 +08:00
Frank Song
57ee0ce069 Add CSP report collector endpoint 2026-05-13 10:52:59 +08:00
Frank Song
5ae63ddd13 Fix stale stream state in session list 2026-05-13 10:28:12 +08:00
Frank Song
9ea4f1145d Fix stale stream exception writeback guards 2026-05-13 10:23:03 +08:00
Frank Song
f4efe0790b Complete worktree remove i18n coverage 2026-05-13 09:57:24 +08:00
Frank Song
e177f64e78 Add worktree remove PR screenshots 2026-05-13 09:53:56 +08:00
Frank Song
46c62851ad Harden worktree removal safeguards 2026-05-13 09:49:15 +08:00
Frank Song
93b7d35bfa Issue #2057 Slice 2: Add worktree remove action
Backend:
- POST /api/session/worktree/remove — removes a session's git worktree
- Guards: stream/terminal lock, dirty/untracked without force
- remove_worktree_for_session() in api/worktrees.py

Frontend:
- 'Remove Worktree' context menu item + confirm modal
- i18n keys for all 11 locales

Tests:
- 5 tests: clean remove, missing worktree, no-path, route success, 404
2026-05-13 09:11:55 +08:00
nesquena-hermes
9268f411d8
Merge pull request #2153 from nesquena/stage-345
stage-345: 2-PR low-risk batch — stream-ownership guard against stale writebacks + Refresh-usage button on provider quota card
2026-05-12 16:56:15 -07:00
Hermes Agent
9336161fbd docs: CHANGELOG stage-345 — close v0.51.51, open Unreleased for #2136 + #2150 2026-05-12 23:12:22 +00:00
Hermes Agent
5f33901b6a Merge pull request #2150 into stage-345
feat: add manual provider usage refresh (Jordan-SkyLF)

Adds a 'Refresh usage' button on the Provider quota card in Settings → Providers,
with cache: 'no-store' fetch + browser cache-bust query string. Pure browser-side
cache-busting; the server-side /api/provider/quota endpoint has no cache layer
yet (refresh=1 query param is currently a no-op server-side; the win is bypassing
browser/proxy/SW caches).
2026-05-12 23:11:49 +00:00
Hermes Agent
20717a0d0a Merge pull request #2136 into stage-345
fix: guard stale stream writebacks (LumenYoung)

Prevents stale WebUI stream workers from writing old results into a session
after that session has already moved on to another stream. Adds new helper
_stream_writeback_is_current() (a token equality check against the session's
active_stream_id) and short-circuits the two finalize/cancel paths when the
worker no longer owns the session writeback.
2026-05-12 23:11:48 +00:00
Jordan SkyLF
062ef74ec0 fix: guard provider quota refresh fallback button state 2026-05-12 15:41:19 -07:00
Lumen Yang
4b57b202a0 fix: guard stale stream writebacks 2026-05-13 00:05:09 +02:00
Jordan SkyLF
b1f752ad3f feat: add provider quota refresh control 2026-05-12 13:17:27 -07:00
nesquena-hermes
62974438f7
Merge pull request #2148 from nesquena/stage-344
stage-344: 16-PR contributor batch — i18n + insights + manual-compress async + workspace recovery + iOS PWA + Cloudflare login health + bash 3.2 (fr locale)
2026-05-12 09:41:30 -07:00
Hermes Agent
2def05f385 stage-344: apply Opus SHOULD-FIX #1+#2 — #2128 multi-tab race + stale-done re-emit
(1) compress/status no longer pops the job entry on first read of `done` payload.
    Second open tab no longer sees `idle` and a stale-job toast.
(2) compress/start no longer short-circuits to a stale `done` payload when
    re-invoked within the 10-minute TTL. Re-running /compress always starts
    fresh, so closing-and-reopening a tab mid-compress works correctly.

Third SHOULD-FIX (#2135 cfg["model"] fallback tightening when no custom_providers
entry matches) deferred to follow-up — strictly no-worse-than-master behavior.

tests/test_sprint46.py 10/10 still passes.
2026-05-12 16:37:37 +00:00
Hermes Agent
4ab6cd68ad docs: CHANGELOG stage-344 — close v0.51.50, open Unreleased for 16-PR contributor batch 2026-05-12 16:21:50 +00:00
Hermes Agent
7116c680df stage-344: maintainer fix for #2142 fr locale — add LOCALES tuple entries + _LOGIN_LOCALE block
#2142 (legeantbleu) added the fr locale to static/i18n.js but didn't update:
1. tests/test_issue1488_composer_voice_buttons.py: two TestComposerVoiceButtonI18n + TestVoiceModePreferenceGate LOCALES tuples needed 'fr'
2. api/routes.py: _LOGIN_LOCALE needed an 'fr' block so the login page localizes for French users (issue #1442 parity contract)
3. tests/test_login_locale_parity.py: the test asserting 'fr' falls-back-to-'en' is inverted — fr now resolves to fr, with sibling assertions for fr-FR and fr-CA

Mirrors the stage-340 fix for the it locale (PR #2067 → maintainer adds tuple entries). 46/46 i18n tests pass after fix.
2026-05-12 16:14:47 +00:00
Hermes Agent
9c7eb42658 Merge pull request #2142 into stage-344
i18n: add French (fr) locale (938 keys, alphabetical en→fr→it position)
2026-05-12 16:13:48 +00:00
Hermes Agent
c677c19a8f Merge pull request #2128 into stage-344
Fix manual compression proxy timeouts (closes #2087)

# Conflicts:
#	CHANGELOG.md
2026-05-12 16:13:01 +00:00
Hermes Agent
1ee8627acb Merge pull request #2135 into stage-344
Fix custom live model scoping (closes #2126, refs #2131)

# Conflicts:
#	CHANGELOG.md
2026-05-12 16:13:00 +00:00
Hermes Agent
aa85bd2e7c Merge pull request #2138 into stage-344
fix: recover from stale deleted workspaces
2026-05-12 16:12:58 +00:00
Hermes Agent
23425b23c8 Merge pull request #2129 into stage-344
fix: purge missing inflight sessions (closes #2092)
2026-05-12 16:12:57 +00:00
Hermes Agent
8dd0b4ec31 Merge pull request #2139 into stage-344
fix: audit turn journal terminal collisions
2026-05-12 16:12:56 +00:00
Hermes Agent
a06952ab00 Merge pull request #2140 into stage-344
Preserve fallback provider credential hints (closes #2133)

# Conflicts:
#	CHANGELOG.md
2026-05-12 16:12:54 +00:00
Hermes Agent
4c5a246647 Merge pull request #2125 into stage-344
docs: clarify compression anchor helpers (closes #2093)
2026-05-12 16:12:53 +00:00
Hermes Agent
8520755bd2 Merge pull request #2130 into stage-344
feat: load full lineage segments on demand
2026-05-12 16:12:52 +00:00
Hermes Agent
13c3646c55 Merge pull request #2121 into stage-344
fix: stack analytics usage cards on mobile (refs #2104) — TEST CONFLICT EXPECTED

# Conflicts:
#	tests/test_insights.py
2026-05-12 16:12:40 +00:00
Hermes Agent
2cccb8abcc Merge pull request #2120 into stage-344
fix: bucket long-range daily token charts (closes #2103)
2026-05-12 16:12:11 +00:00
Hermes Agent
56032151f7 Merge pull request #2143 into stage-344
Fix iPhone PWA chat bottom scroll stutter
2026-05-12 16:12:09 +00:00
Hermes Agent
45ac810a37 Merge pull request #2141 into stage-344
Fix Settings System mobile version wrapping (closes #2102)

# Conflicts:
#	CHANGELOG.md
2026-05-12 16:11:55 +00:00
Hermes Agent
76cf06a1a1 Merge pull request #2137 into stage-344
Fix login health probe credentials (closes #2122)
2026-05-12 16:11:42 +00:00