Commit graph

7642 commits

Author SHA1 Message Date
nesquena-hermes
06f968da5d docs(changelog): #6040 gateway approvals by run ID (#6008) 2026-07-23 02:43:49 +00:00
nesquena-hermes
0d06ae3467 Merge remote-tracking branch 'origin/master' into stage/6040 2026-07-23 02:26:42 +00:00
nesquena-hermes
12ea6ec927
Merge pull request #6445 from nesquena/stage/6408
Release: Compact Worklog last-char finalize fix (#6408)
2026-07-22 19:09:22 -07:00
nesquena-hermes
d64897c539 docs(changelog): #6408 anchor-prose last-char finalize fix 2026-07-23 02:04:19 +00:00
starship-s
5bf77d558a fix: finalize sealed anchor prose at completion (#6408)
Anchor-owned process-prose rows kept the newest character as streaming-markdown
lookahead until the turn settled, so Compact Worklog prose immediately before a
tool card appeared one character short mid-stream. Finalize the cached parser
once when the row becomes 'completed' (running the same media/link/table cleanup
as the main body parser), guarded by a 'finalized' flag + self-heal on edit.

Co-authored-by: starship-s <starship-s@users.noreply.github.com>
2026-07-23 01:46:01 +00:00
nesquena-hermes
5b325d1472
Merge pull request #6443 from nesquena/stage/6319
Release: public-share local-media leak fix (#6319, P0 #6174)
2026-07-22 18:28:20 -07:00
nesquena-hermes
ddb6210c06 docs(changelog): #6319 public-share media leak fix (#6174) 2026-07-23 01:23:37 +00:00
nesquena-hermes
681adf0597 test(share): adversarial regression for public-share media embed boundary (#6174)
Covers traversal, symlink-escape, absolute-outside, file://, extension-spoof,
SVG, oversize, empty-allowed-roots (fail-closed), public-URL pass-through, and
the _sanitize_message integration — proven red-before-green against master.

Co-authored-by: webtecnica <webtecnica@users.noreply.github.com>
2026-07-23 01:22:56 +00:00
webtecnica
02b5f885c8 fix(share): harden _embed_share_media with path allow-list + mime validation (#6174)
Embed local MEDIA: image refs as inline base64 at snapshot-build time,
gated by a workspace/attachment-root allow-list, 512KiB cap, image-MIME
allow-list, and magic-byte content validation. Everything else (traversal,
symlink-escape, file://, non-image, SVG, oversize) becomes a static
placeholder. Closes P0 #6174 (public shares no longer emit authenticated
/api/media requests for local paths).

Co-authored-by: webtecnica <webtecnica@users.noreply.github.com>
2026-07-23 01:21:59 +00:00
nesquena-hermes
f26abae544
Merge pull request #6439 from nesquena/stage/6113
Release: #6113 per-turn used-model chip in transparent footer
2026-07-22 15:18:52 -07:00
nesquena-hermes
e5096d06a0 Release: #6113 per-turn used-model chip in transparent footer 2026-07-22 22:13:25 +00:00
nesquena-hermes
bbb417b3f1 stage: merge #6113 (per-turn used-model chip in transparent footer) 2026-07-22 22:13:08 +00:00
nesquena-hermes
9e1b8a115a
Release: #6390 preserve scroll position after live-to-final settlement (#6436)
Release: #6390 preserve scroll position after live-to-final settlement
2026-07-22 13:59:04 -07:00
nesquena-hermes
ef003ec958 Release: #6390 preserve scroll position after live-to-final settlement 2026-07-22 20:43:28 +00:00
nesquena-hermes
6e2267dd5f stage: merge #6390 (scroll preservation after live-to-final settlement) 2026-07-22 20:43:04 +00:00
Rod Boev
8119d91dc3 fix(#6008): serialize identity-less approval relays 2026-07-22 15:06:33 -04:00
nesquena-hermes
699e592e85
Release exp-batch1: #6372 #5797 #5944 (#6425)
Release exp-batch1: MIME safety (#6372), atomic config writes (#5797), ctl.sh foreign-instance guard (#5944)
2026-07-22 12:05:00 -07:00
nesquena-hermes
35834d49de Release exp-batch1: MIME safety (#6372), atomic config writes (#5797), ctl.sh foreign-instance guard (#5944) 2026-07-22 18:58:03 +00:00
nesquena-hermes
cd9fd7a8e7 stage exp-batch1: #6372 #5797 #5944 2026-07-22 18:45:35 +00:00
nesquena-hermes
8c403a525c stage: merge #5944 2026-07-22 18:45:24 +00:00
nesquena-hermes
f39cedafca stage: merge #5797 2026-07-22 18:45:24 +00:00
nesquena-hermes
65a3f795eb stage: merge #6372 2026-07-22 18:45:24 +00:00
Rod Boev
6d9e4ac4c5 fix(#6008): keep stop failure toasts actionable across locales 2026-07-22 12:33:57 -04:00
Rod Boev
dc4078426a fix(#6008): retire failed gateway startup lifecycle 2026-07-22 12:33:57 -04:00
Rod Boev
5a954c79d3 fix(#6008): keep gateway cancel authority stable across startup teardown 2026-07-22 12:33:26 -04:00
Rod Boev
2c6ce96596 fix(#6008): wait for gateway stop acknowledgement 2026-07-22 12:33:26 -04:00
Rod Boev
4a71e407b1 fix(gateway): keep retained no-run approvals visible 2026-07-22 12:31:12 -04:00
Rod Boev
0a3a630856 fix(gateway): keep approval and stop acknowledgements honest 2026-07-22 12:31:12 -04:00
Rod Boev
ecdd0af573 test(gateway): cover capability-gated approval IDs 2026-07-22 12:31:12 -04:00
Rod Boev
918b9ddb63 test(gateway): align approval lifecycle regressions 2026-07-22 12:31:12 -04:00
Rod Boev
fb88095530 fix(gateway): require agent-issued approval identities 2026-07-22 12:31:12 -04:00
Rod Boev
a91bd88c70 fix(gateway): preserve approval identity provenance 2026-07-22 12:31:12 -04:00
Rod Boev
f30178e18a fix(gateway): fall back safely without approval identities 2026-07-22 12:31:12 -04:00
Rod Boev
b481dfea13 fix(#6008): keep retained approvals visible in session attention 2026-07-22 12:31:12 -04:00
Rod Boev
5826d76da0 fix(#6008): publish the authoritative approval head 2026-07-22 12:31:12 -04:00
Rod Boev
6460c48ce6 fix(#6008): keep gateway approvals attached to the right run 2026-07-22 12:31:12 -04:00
Rod Boev
b907630f8f fix(#6008): keep gateway approvals attached to the right run 2026-07-22 12:31:11 -04:00
Rod Boev
489728d71f fix(gateway): scope approval mirror cleanup to live heads (#6008) 2026-07-22 12:19:33 -04:00
Rod Boev
39fc169834 fix(#6008): route gateway approvals by run ID 2026-07-22 12:19:33 -04:00
nesquena-hermes
e9e9ed09a5
Release: #6148 alias-prefix model routing fix (exp-v0.52.141) (#6418)
* fix: resolve provider alias before matching _PROVIDER_MODELS (#6148)

* fix(backend): resolve model prefix through _PROVIDER_ALIASES before matching

- Fix IndentationError: dedent _canon_prefix assignment to 8 spaces
- Rebased onto upstream/master
- Add regression test: alias prefix (z-ai) resolves to canonical key (zai)
  and routes cross-provider through OpenRouter (#6131)

* fix(#6131): canonicalize both sides via _canonicalise_provider_id (idempotent) + regression tests

Codex found _resolve_provider_alias breaks Qwen (qwen->alibaba, not in _PROVIDER_MODELS)
and cross-routes alias-of-active-provider (raw vs canon asymmetry). Use the idempotent
_canonicalise_provider_id for both membership and equality. Adds 2 regression tests.

* docs(changelog): stamp #6148 alias-prefix model routing fix

---------

Co-authored-by: webtecnica <75556242+webtecnica@users.noreply.github.com>
Co-authored-by: webtecnica <webtecnica@users.noreply.github.com>
Co-authored-by: nesquena-hermes <agent@nesquena-hermes>
Co-authored-by: nesquena-hermes <agent@webui>
2026-07-22 09:51:37 +00:00
nesquena-hermes
478f7749ab
Release: #6107 per-model reasoning_efforts precedence (exp-v0.52.140) (#6417)
* fix: honor per-model reasoning effort metadata

* docs(changelog): stamp #6107 per-model reasoning_efforts precedence

---------

Co-authored-by: Charles Inglis <6466275+CharlesMcquade@users.noreply.github.com>
Co-authored-by: nesquena-hermes <agent@nesquena-hermes>
Co-authored-by: nesquena-hermes <agent@webui>
2026-07-22 07:50:29 +00:00
sheldon-im
a05cb953f2 fix: remeasure oversized composer appends 2026-07-22 13:27:11 +09:00
nesquena-hermes
8586572da5
Release: #6389 stream-teardown leak fix (exp-v0.52.139) (#6416)
* fix(#6389): remove clear_offline_buffer() teardown blocks that cause data loss on late reconnects

Keep the real leak fixes:
- unregister_stream_owner() in both streaming.py and gateway_chat.py
- AGENT_INSTANCES.pop() in gateway_chat.py

The clear_offline_buffer() calls could clear a channel's offline buffer
after a late reconnect already fetched the channel but before it subscribed,
causing the reconnecting client to lose all buffered events (including
stream_end) and hang indefinitely on heartbeats.

STREAMS.pop() already releases registry ownership; GC reclaims the buffer
once the last outstanding channel reference is dropped, correctly preserving
replay for in-flight reconnects.

* docs(changelog): stamp #6389 stream-teardown leak fix

---------

Co-authored-by: webtecnica <webtecnica@users.noreply.github.com>
Co-authored-by: nesquena-hermes <agent@nesquena-hermes>
Co-authored-by: nesquena-hermes <agent@webui>
2026-07-22 04:09:49 +00:00
sheldon-im
a383525afe fix: restrict composer resize fast path to appends 2026-07-22 09:45:58 +09:00
nesquena-hermes
7a3646bafd
docs(changelog): stamp #6403 (ja locale) + #6222 (id-linked tool anchor hydration) — exp-v0.52.138 (#6412) 2026-07-21 23:59:41 +00:00
nesquena-hermes
a2313179a9
Merge pull request #6222 from franksong2702/franksong2702/live-stream-id-linked-transcript-anchor
Live Stream: hydrate ID-linked historical tools into Anchors
2026-07-21 16:42:06 -07:00
nesquena-hermes
71fafbe21d Merge remote-tracking branch 'origin/master' into gate-6222 2026-07-21 23:24:54 +00:00
nesquena-hermes
bc05221577
Merge pull request #6403 from koshikai/i18n/ja-locale-refresh
feat(i18n): refresh Japanese (ja) locale to parity with upstream master
2026-07-21 16:22:53 -07:00
webtecnica
700bd976c1 fix(media): narrow MIME_MAP to only .ts/.tsx text/plain, add regression tests
- Add only .ts→text/plain and .tsx→text/plain to MIME_MAP (exclude .js,
  .jsx, .css and other unsafe mappings that would make workspace files
  executable as same-origin scripts)
- Add test_ts_artifact_served_as_text_plain_with_attachment — asserts
  Content-Type: text/plain, Content-Disposition: attachment, and
  X-Content-Type-Options: nosniff for .ts files via /api/media
- Add test_tsx_artifact_served_as_text_plain_with_attachment — same for .tsx
- Add test_file_raw_js_not_served_as_inline_executable — proves that a
  workspace .js file falls through to application/octet-stream instead of
  text/javascript via /api/file/raw

Closes #6372
2026-07-21 20:02:57 -03:00
webtecnica
f35081683a fix tests for #6385 scroll snapshot: update #4970 assertion + add behavioral coverage
- Fix test_stream_done_runs_scroll_preserving_collapse_pass_after_disarm:
  assert _doneLiveScrollSnapshot is captured before arm, and the
  argument-bearing _renderMessagesWithScrollSnapshot({_prescrollSnapshot:_doneLiveScrollSnapshot})
  call is used after disarm (the no-arg literal no longer exists).
- Add test_prescroll_snapshot_bypasses_capture_no_option_fallback_still_captures:
  Node.js behavioral harness that supplies a sentinel _prescrollSnapshot,
  stubs _captureMessageScrollSnapshot with a counter, and proves:
    1) sentinel reaches _restoreMessageScrollSnapshotSameFrame without a capture
    2) no-option / empty-{} calls still capture normally (callers at
       static/ui.js:9565, 14416, 14424).
2026-07-21 19:55:00 -03:00