Commit graph

5938 commits

Author SHA1 Message Date
nesquena-hermes
78ca4d43a1 Merge #5005 (futureworld678 Shift+Enter) into stage 2026-06-30 21:51:42 +00:00
nesquena-hermes
05e9be1429
Merge pull request #5293 from nesquena/release/stage-5120
Release v0.51.777 — configurable provider budget + %-used (#5120)
2026-06-30 14:47:29 -07:00
nesquena-hermes
512824dcc3 docs(changelog): configurable provider budget + %-used (#5120) 2026-06-30 21:34:35 +00:00
nesquena-hermes
0b74397fa6 Merge #5120 (rodboev budget limit) into stage 2026-06-30 21:28:51 +00:00
nesquena-hermes
673edbf054
Merge pull request #5292 from nesquena/release/stage-5002
Release v0.51.776 — opt-in per-project new-conversation shortcuts (#5002)
2026-06-30 14:22:57 -07:00
nesquena-hermes
f579ed83dc fix(#5002): repaint sidebar after quick-create newSession (Codex: newSession doesn't render; callers must) 2026-06-30 21:12:14 +00:00
nesquena-hermes
ee7f6b584d fix(#5002): hydrate _projectQuickCreate at boot + rebuild sidebar on toggle change
Codex gate findings: (1) the opt-in flag was only set when Settings opened, so an
enabled setting didn't take effect on a fresh load — now hydrated from /api/settings
at boot (mirrors _largeTextPasteAsAttachment, default-false); (2) toggling the
checkbox now rebuilds the sidebar so the + buttons appear/disappear immediately.
2026-06-30 21:06:35 +00:00
nesquena-hermes
34f4a72256 docs(changelog): opt-in per-project new-conversation shortcuts (#5002) 2026-06-30 20:56:49 +00:00
nesquena-hermes
8a5172275d Merge #5002 (per-project quick-create, opt-in) into stage 2026-06-30 20:56:05 +00:00
nesquena-hermes
dc569ee0fb
Merge pull request #5290 from nesquena/release/stage-5079b
Release v0.51.775 — OpenAI-compatible TTS backend, SSRF-hardened (#5079)
2026-06-30 13:47:49 -07:00
nesquena-hermes
a103775e42 docs(changelog): OpenAI-compatible TTS backend, SSRF-hardened (#5079) 2026-06-30 20:39:51 +00:00
nesquena-hermes
ba401d3784 Merge #5079 (OpenAI TTS + SSRF hardening) into stage 2026-06-30 20:39:04 +00:00
nesquena-hermes
eb2c4b1e7d fix(#5079): no-redirect opener for OpenAI TTS (block redirect-to-private SSRF + bearer leak)
A public TTS host could 301/302/303-redirect POST /audio/speech to an internal
target (e.g. http://169.254.169.254), and urllib's default redirect handler
would follow it carrying the Authorization bearer — both an SSRF bounce past the
base-url guard and a credential leak. Now uses a no-redirect opener
(_NoRedirectTtsHandler raises on any redirect) via the _tts_open seam. +redirect
rejection regression test. Residual DNS-rebinding TOCTOU (re-resolve at connect)
is a narrower low-severity window noted for follow-up.
2026-06-30 20:37:43 +00:00
nesquena-hermes
6bcb728f08 fix(#5079): block private/link-local/reserved IP targets in OpenAI TTS base_url (SSRF hardening)
The base_url validator accepted any https host; an https URL pointing at an
internal/link-local/loopback/reserved IP (e.g. https://169.254.169.254 cloud
metadata, https://10.x internal) passed the scheme-only check. Now resolves the
host and rejects blocked-target addresses (private/loopback/link-local/reserved/
multicast/unspecified), while still allowing public OpenAI-compatible hosts and
the explicit localhost-over-http dev case. DNS-resolution failure is allowed
(unreachable host can't be an SSRF vector + avoids false-rejecting public hosts
that don't resolve in sandboxed envs). +5 regression vectors.
2026-06-30 20:37:43 +00:00
nesquena-hermes
df9c643a80
Merge pull request #5288 from nesquena/release/stage-4881
Release v0.51.774 — Kanban modal fields (#4881)
2026-06-30 13:05:32 -07:00
nesquena-hermes
93d31ebad5 docs(changelog): Kanban modal skills/max_runtime/parents (#4881) 2026-06-30 19:51:22 +00:00
nesquena-hermes
027699b570 Merge #4881 (rodboev Kanban modal fields) into stage 2026-06-30 19:50:46 +00:00
nesquena-hermes
b098e5c658 feat(#4676): gate per-project quick-create buttons behind opt-in setting
Add a default-OFF 'project_quick_create_buttons' setting that gates the
per-project '+' quick-create buttons on sidebar project chips. The chip
render site only calls _attachProjectQuickCreateButton when the new
window._projectQuickCreate runtime flag is enabled, so the buttons do
not appear unless the user opts in via Settings.

Mirrors the large_text_paste_as_attachment opt-in plumbing (defaults,
allowlist, settings collect/restore/save, window hydration at both sites,
checkbox row, i18n across all locales).
2026-06-30 19:49:07 +00:00
nesquena-hermes
4e8bd002f7
Merge pull request #5286 from nesquena/release/stage-4871
Release v0.51.773 — Mermaid toolbar controls in chat (#4871)
2026-06-30 12:43:18 -07:00
Rod Boev
66fc8722c1 fix(#4676): expose quick-create button purpose to screen readers 2026-06-30 19:28:28 +00:00
Rod Boev
80dbbc1e93 fix(#4676): swallow duplicate quick-create inflight rejections 2026-06-30 19:28:27 +00:00
Rod Boev
0ea9e72a9a docs(#4676): clarify quick-create rollback ownership 2026-06-30 19:28:27 +00:00
Rod Boev
a109f86946 Keep project quick-create filter changes in sync with session creation outcomes 2026-06-30 19:28:27 +00:00
Rod Boev
08c4004271 Preserve touch quick-create clicks while blocking chip long-press leakage 2026-06-30 19:28:27 +00:00
Rod Boev
a9871bbd9f Harden project quick-create against eval-arg drift and touch long-press leakage 2026-06-30 19:28:27 +00:00
Rod Boev
5f78e0f100 test(projects): remove dead local from quick-create harness (#4676) 2026-06-30 19:28:27 +00:00
Rod Boev
11882aab2a feat(projects): add per-project new conversation shortcuts (#4676) 2026-06-30 19:28:27 +00:00
nesquena-hermes
c4b4d874ac docs(changelog): Mermaid toolbar controls in chat (#4871) 2026-06-30 19:27:47 +00:00
nesquena-hermes
d954d4c861 Merge #4871 (rodboev Mermaid toolbar) into stage 2026-06-30 19:27:15 +00:00
nesquena-hermes
1ba91d9e6b
Merge pull request #5285 from nesquena/release/stage-4574
Release v0.51.772 — mobile titlebar prioritize session title (#4574)
2026-06-30 12:26:15 -07:00
nesquena-hermes
66714f04e8 docs(changelog): mobile titlebar prioritize session title (#4574) 2026-06-30 19:11:32 +00:00
nesquena-hermes
492fdfb84a Merge #4574 (rodboev mobile titlebar) into stage 2026-06-30 19:10:38 +00:00
nesquena-hermes
750780f056
Merge pull request #5284 from nesquena/release/stage-5019
Release v0.51.771 — mobile approval touch targets (#5019)
2026-06-30 12:09:00 -07:00
nesquena-hermes
ea92608e69 docs(changelog): mobile touch targets + approval layout (#5019) 2026-06-30 18:55:07 +00:00
nesquena-hermes
61cc0d167b Merge #5019 (disco32r mobile touch targets) into stage 2026-06-30 18:54:36 +00:00
nesquena-hermes
0da7d88f48
Merge pull request #5283 from nesquena/release/stage-pq1
Release v0.51.770 — priority-queue batch (#5168 #5211)
2026-06-30 11:18:27 -07:00
nesquena-hermes
049b98ad01 docs(changelog): priority-queue batch pq1 (#5168 #5211) 2026-06-30 18:06:34 +00:00
nesquena-hermes
c7767f9295 Merge #5211 (search-ranking) into stage-pq1 2026-06-30 18:06:11 +00:00
nesquena-hermes
1f00e4de8c Merge #5168 (pet-handoff) into stage-pq1 2026-06-30 18:06:09 +00:00
Lester
b1c11939aa Add Shift+Enter send key option 2026-06-30 18:04:29 +00:00
nesquena-hermes
53a997d52d
Merge pull request #5282 from nesquena/release/stage-w5
Release v0.51.769 — Wave 5 (#5161)
2026-06-30 10:37:13 -07:00
nesquena-hermes
f07b1315ca docs(changelog): wave-5 (#5161) 2026-06-30 17:25:36 +00:00
nesquena-hermes
121059b384 Merge #5161 (pr/5144-busy-composer-placeholder-hint) into stage-w5 2026-06-30 17:25:03 +00:00
nesquena-hermes
5f2d82d5c9
Merge pull request #5281 from nesquena/release/stage-w4
Release v0.51.768 — Wave 4 batch (#5248 #5207)
2026-06-30 10:24:05 -07:00
nesquena-hermes
ab5a757ffe docs(changelog): wave-4 batch (#5248 #5207) 2026-06-30 17:14:12 +00:00
sheldon-im
944d57eedc Improve latest assistant response landmark 2026-06-30 17:13:45 +00:00
allenliang2022
4ef9d7c5cb fix(webui): render a server-initiated turn that finished during an SSE gap on a visible tab
A visible tab can permanently miss a server-initiated turn (self-wake /
cron / restart hook) when its per-session SSE is momentarily down at the
emit instant. server_turn_started is a fire-and-forget broadcast with no
replay buffer; if the turn also finishes before the tab reconnects, the
on-subscribe self-heal finds no live run in ACTIVE_RUNS and replays
nothing, so the transcript stays stale until a hard refresh.

Extend the self-heal: the (re)subscribing tab reports its last-known
message_count (?known_count); when there is no live run to replay, the
handler compares the persisted count and, if the server is ahead, emits a
lightweight session-updated frame. The frontend syncs incrementally via
the #5189 keepStaleUntilLoaded swap-in-place loadSession path (no
clear+refetch, so the #5177/#5189 blank-gap jump is not reintroduced).
Idle-only and pane-scoped; emits only when the server is strictly ahead.
2026-06-30 17:13:45 +00:00
nesquena-hermes
a09eb83f52
Merge pull request #5280 from nesquena/release/stage-w3
Release v0.51.767 — Wave 3 batch (#5260 #4957)
2026-06-30 10:12:51 -07:00
nesquena-hermes
67a789d9af docs(changelog): wave-3 batch (#5260 #4957) 2026-06-30 17:06:31 +00:00
Maude Bot
5263b9acf7 feat: add Webhooks sidebar filter parity
Co-authored-by: Kilian Tyler <kilian@kil.dev>
2026-06-30 17:06:31 +00:00