Commit Graph

65377 Commits

Author SHA1 Message Date
Ayaan Zaidi
ca3f247eb2 fix(codex): fan out app-server liveness retirement 2026-07-09 14:26:05 +05:30
Ayaan Zaidi
e4949996d1 fix(agents): apply provider-class idle ceilings to explicit run budgets 2026-07-09 14:26:05 +05:30
Ayaan Zaidi
048f2096d2 fix(agents): keep provider-class idle tiers under agent budgets and cron 2026-07-09 14:26:05 +05:30
Ayaan Zaidi
e00236d20c docs: correct cron self-hosted idle watchdog wording 2026-07-09 14:26:05 +05:30
Ayaan Zaidi
28e53b6817 fix(config): allow timeoutSeconds 0 and bound local stream creation 2026-07-09 14:26:05 +05:30
Ayaan Zaidi
215be4e4ee fix(agents): keep finite LLM idle watchdog under unlimited run budgets 2026-07-09 14:26:05 +05:30
Ayaan Zaidi
c2789b52a7 fix(agents): respect the blocked-tool floor in stale takeover and steer gates 2026-07-09 14:26:05 +05:30
Ayaan Zaidi
480b5cbc67 fix(agents): expire live-handle stuck recovery as run_stalled 2026-07-09 14:26:05 +05:30
Ayaan Zaidi
eedeb1eccb fix(agents): fall stale_run steer refusals through to direct delivery 2026-07-09 14:26:05 +05:30
Ayaan Zaidi
969efdac4f fix(agents): make run liveness evidence-based 2026-07-09 14:26:05 +05:30
Ayaan Zaidi
953f1c7d0c fix(auto-reply): stamp activity per event and deprecate recovery exports 2026-07-09 14:26:05 +05:30
Ayaan Zaidi
f178553df6 refactor(auto-reply): drop injection activity stamp and orphaned recovery exports 2026-07-09 14:26:05 +05:30
Ayaan Zaidi
4cbe49ba88 fix(auto-reply): set run_stalled before backend cancel in stale expiry 2026-07-09 14:26:05 +05:30
Ayaan Zaidi
ad32cc3607 fix(auto-reply): stamp CLI activity once at the lifecycle bridge seam 2026-07-09 14:26:05 +05:30
Ayaan Zaidi
19803a147f fix(auto-reply): bound terminal reply-run settle and reclaim stale lanes 2026-07-09 14:26:05 +05:30
Peter Steinberger
efe705b889 feat(ui): show microphone activity in Talk mode (#102559) 2026-07-09 09:55:42 +01:00
Ted Li
f984209f54 fix: keep Gemini thinking disabled after clamp (#101832)
* fix: keep Gemini thinking disabled after clamp

* fix: preserve clamped Gemini thinking in wrapper

* test(ai): cover generic Gemini clamp to off

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-09 09:54:52 +01:00
Peter Steinberger
9269a27f18 feat(ui): redesign settings as a full-page takeover with sidebar navigation (#102549)
* feat(ui): redesign settings as a full-page takeover with sidebar navigation

* chore(ui): regenerate i18n metadata after rebase
2026-07-09 09:51:52 +01:00
Supsumintong
574f131554 fix(web-fetch): report exact-limit response bodies as complete, not truncated [AI-assisted] (#102389)
* fix(web-fetch): report exact-limit response bodies as complete, not truncated

* fix(web-fetch): skip zero-byte chunks when confirming overflow past the byte cap

* fix(web-fetch): keep uncertain capped bodies truncated

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-09 09:51:46 +01:00
qingminlong
5a3422ea8d fix(schema): resolve large local refs in schema arrays (#102195)
* fix(schema): resolve large local refs in schema arrays

* fix(schema): type large local ref fixture

* style(schema): format large local ref regression

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-09 09:51:30 +01:00
lsr911
6a3834d41d fix(memory-core): use truncateUtf16Safe for diary context truncation (#102524)
* fix(memory-core): use truncateUtf16Safe for diary context truncation

* test(memory-core): cover utf16 diary truncation

* refactor(memory-core): use plugin sdk text runtime

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-09 09:49:21 +01:00
Harjoth Khara
85aa26d34f fix(agent-core): stop canceled parallel tools from starting (#102276)
* fix(agent-core): skip prepared tools after abort

* docs(agent-core): explain parallel abort guard

* docs(changelog): note parallel cancellation fix

* docs(changelog): leave release notes release-owned

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-09 09:48:11 +01:00
John McChesney TenEyck Jr
ccdb60e5db fix: show iOS chat activity after foreground refresh (#102309)
* Preserve iOS chat activity on foreground refresh

Show an activity indicator when foreground history reports session activity without a chat in-flight snapshot, while keeping unanswered turns blocked and clearing the fallback state on answers, terminal events, session changes, and timeout.

* fix(ios): preserve foreground run ownership

* chore(ios): sync native string inventory

* chore: keep release changelog owned

---------

Co-authored-by: Your Name <you@example.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-09 09:45:35 +01:00
qingminlong
a5f5282816 fix(scripts): report startup help stream errors when pipes fail (#102436)
* fix(scripts): fail startup help rendering on stream errors

* fix(scripts): preserve startup render failure provenance

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-09 09:43:40 +01:00
Peter Steinberger
ecc2cffad8 improve(ui): keep sidebar sessions inline and draggable (#102558)
* feat(ui): add drag-managed sidebar session groups

* chore: keep release notes in PR body
2026-07-09 09:40:53 +01:00
wangmiao0668000666
51b4e78c33 fix(google-meet): bound Google API requests (#102149)
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-09 09:39:34 +01:00
Peter Steinberger
42a8679c4d fix: restore release validation on main (#102516)
* test(qqbot): assert approval fence exactly

* fix(release): wait for ClawHub publish logging

* fix(ci): repair Bun global install smoke

* test(slack): fix app identity fixture
2026-07-09 09:39:08 +01:00
lsr911
32de666163 fix(codex): use truncateUtf16Safe for tool transcript output truncation (#102522)
* fix(codex): use truncateUtf16Safe for tool transcript output truncation

Replace naive .slice(0, N) with truncateUtf16Safe() in event-projector
tool transcript output text to prevent surrogate pair splitting.

Co-Authored-By: Claude <noreply@anthropic.com>

* fix(codex): keep streamed output utf16-safe

* refactor(codex): use plugin sdk text runtime

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-09 09:37:07 +01:00
Peter Steinberger
8a7242461c fix(nodes): restore Mac app allowlist execution (#102536)
* fix(nodes): restore macOS app allowlist execution

* chore: keep node fix out of release changelog
2026-07-09 09:36:36 +01:00
lsr911
145b71f57e fix(oc-path): use truncateUtf16Safe for error message path truncation (#102527)
* fix(oc-path): use truncateUtf16Safe for error message path truncation

Replace naive .slice(0, 80) with truncateUtf16Safe() at three
error-reporting call sites to prevent surrogate pair splitting
in oc:// path validation error messages.

Co-Authored-By: Claude <noreply@anthropic.com>

* test(oc-path): cover utf16 error truncation

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-09 09:35:17 +01:00
lsr911
ed9ce1c584 fix(discord): use truncateUtf16Safe for deploy error body truncation (#102525)
* fix(discord): use truncateUtf16Safe for deploy error body truncation

* test(discord): cover utf16 deploy errors

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-09 09:33:46 +01:00
lsr911
49a5b6a235 fix(compaction): use truncateUtf16Safe for post-compaction context text (#102515)
* fix(compaction): use truncateUtf16Safe for post-compaction context text

Replace naive .slice(0, maxContextChars) with truncateUtf16Safe()
to prevent surrogate pair splitting in post-compaction context
summaries sent to the model.

Co-Authored-By: Claude <noreply@anthropic.com>

* test(compaction): prove context UTF-16 boundary

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-09 09:32:05 +01:00
lsr911
8c608ae674 fix(gateway): use truncateUtf16Safe for config path display truncation (#102513)
* fix(gateway): use truncateUtf16Safe for config path display truncation

Replace naive .slice(0, 117) with truncateUtf16Safe() to prevent
surrogate pair splitting in config path sanitization output.

Co-Authored-By: Claude <noreply@anthropic.com>

* test(gateway): prove config path UTF-16 boundary

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-09 09:29:57 +01:00
lsr911
720aeb1547 fix(config): use truncateUtf16Safe for allowed-values hint text (#102512)
* fix(config): use truncateUtf16Safe for allowed-values hint text

Replace naive .slice(0, N) with truncateUtf16Safe() to prevent
surrogate pair splitting in config validation hint messages
shown to users.

Co-Authored-By: Claude <noreply@anthropic.com>

* test(config): prove UTF-16 allowed-value hint boundary

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-09 09:28:25 +01:00
xingzhou
b23fdcfac9 fix(codex): avoid broken emoji in dynamic tool timeout logs (#102509)
* fix(codex): keep dynamic tool log fields UTF-16 safe

* test(codex): narrow dynamic tool response item

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-09 09:26:22 +01:00
QiuYuang
d5a31888ed fix(memory-host): reject queued worker requests on shutdown (#102451)
* fix(memory-host): reject queued worker requests on shutdown

* fix(memory-host): settle queued requests on shutdown

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-09 09:26:05 +01:00
Peter Steinberger
c96163b6ca refactor(ui): drop the divider line above the sidebar More section (#102531) 2026-07-09 09:25:08 +01:00
lsr911
d0c49a7ad4 fix(mcp-runtime): use truncateUtf16Safe for MCP metadata text truncation (#102500)
* fix(mcp-runtime): use truncateUtf16Safe for MCP metadata text truncation

Replace naive .slice(0, N) with truncateUtf16Safe() to prevent
surrogate pair splitting in MCP tool metadata descriptions shown
to users through the bundle MCP runtime catalog.

Co-Authored-By: Claude <noreply@anthropic.com>

* test(mcp-runtime): cover UTF-16 metadata boundary

* style(mcp-runtime): keep imports grouped

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-09 09:24:40 +01:00
Miorbnli
e6a2136c3a fix(msteams): lowercase content type so attachment classification is case-insensitive (#102431)
* fix(msteams): lowercase content type so attachment classification is case-insensitive

normalizeContentType only trimmed its input. MIME types are case-insensitive
(RFC 2045), and MS Teams relay payloads (SharePoint, OneDrive, Bot Framework CDN)
routinely emit mixed-case values such as "Image/PNG" or
"Application/Vnd.Microsoft.Teams.File.Download.Info". Every downstream
comparison in the attachments module assumes a lowercased value
(startsWith("image/"), === "application/vnd.microsoft.teams.file.download.info",
startsWith("text/html")), so a mixed-case attachment was silently misclassified:
images became documents, HTML bodies were skipped, and file-download candidates
were not resolved.

Lowercase in normalizeContentType so all six call sites match. The sibling
inferPlaceholder in the same file already lowercases via
normalizeLowercaseStringOrEmpty, so this aligns the two paths.

Co-Authored-By: Claude <noreply@anthropic.com>

* fix(msteams): route HTML text extraction through normalizeContentType

extractTextFromHtmlAttachments guarded its loop with an exact
`attachment.contentType !== "text/html"` check, which is the same
case-sensitivity gap the rest of the PR closes via normalizeContentType.
A mixed-case "TEXT/HTML" attachment (common from Teams relays; MIME types are
case-insensitive per RFC 2045) was skipped, so a message whose only body text
lived in such an HTML attachment entered the agent path with empty text.

Route the guard through normalizeContentType so mixed-case HTML attachments
reach the body extractor. Export the function and add regression coverage for
mixed-case / whitespace-padded / object-content / non-HTML cases.

Co-Authored-By: Claude <noreply@anthropic.com>

* fix(msteams): preserve MIME parameter case

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-09 09:24:35 +01:00
mushuiyu886
240d350c7f fix(gateway): finish plugin HTTP responses after post-header failures (#102125)
* fix(gateway): finish plugin HTTP responses after post-header failures

* test(gateway): satisfy plugin HTTP regression lint

* fix(gateway): skip ending destroyed plugin responses

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-09 09:22:32 +01:00
NianJiu
67be0cda44 fix: cancel Android link preview calls (#101853)
* fix: cancel Android link preview calls

* test(android): cover response cancellation stage

* fix(android): preserve link preview deadline

* docs(android): clarify cancellation contract

---------

Co-authored-by: NianJiuZst <180004567+NianJiuZst@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-09 09:21:50 +01:00
Peter Steinberger
5c3c5c0ee4 feat(ui): redesign sessions page with overview tiles, kind avatars, and context meters (#102523)
The Control UI sessions roster now leads with operator telemetry: overview
tiles (sessions / live / unread / tokens), per-kind row avatars with a live-run
dot, compact token values with context-usage meters (ok/warn/danger at
65%/85%), initial-load skeleton rows, and icon-led empty states. Stale token
snapshots render as ~approximations with a neutral meter and never drive
warning tones, matching the chat composer convention; the overview token sum
counts only known snapshots (~ when partial, n/a when none). Label chips
ellipsize instead of overflowing sticky columns; <=500px drops the avatar to
preserve the key column budget.

Closes #102517
2026-07-09 09:19:03 +01:00
Peter Steinberger
7e0b67d7ea fix(ui): mark the active split pane with a focus ring instead of offset accent lines (#102511) 2026-07-09 09:16:39 +01:00
Peter Steinberger
7698783037 perf(test): reuse session layout browser 2026-07-09 04:06:43 -04:00
Peter Steinberger
9566aded5c fix(openai): correct Realtime auth and transcription secrets (#102518)
* fix(openai): correct Realtime auth and transcription secrets

* chore: leave release notes to release automation
2026-07-09 08:55:31 +01:00
Peter Steinberger
ea8076a091 fix(macos): remove stale .sidebar-shell__header rule from injected dashboard CSS (#102526) 2026-07-09 08:54:56 +01:00
Peter Steinberger
18b24edea6 perf(test): run session layout viewports concurrently 2026-07-09 03:50:40 -04:00
chengzhichao-xydt
51bb5f6847 fix(agents): keep provider error detail truncation UTF-16 safe (#102496)
* fix(agents): keep provider error detail truncation UTF-16 safe

Replace the raw detail.slice(0, limit - 1) in truncateErrorDetail with
truncateUtf16Safe so provider error previews do not emit lone surrogates
when an emoji falls on the truncation boundary.

Adds a regression test that places an emoji at the default truncation
boundary and asserts the formatted detail contains no lone surrogates.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* test(agents): prove provider error UTF-16 boundary

---------

Co-authored-by: chengzhichao-xydt <chengzhichao-xydt@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-09 08:44:29 +01:00
冯基魁
bacf048ab9 fix(chat): keep proof decision out of actor closure (#101611)
* fix(chat): keep proof decision out of actor closure

* fix(ios): narrow chat proof lock scope

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-09 08:44:14 +01:00
xydt-tanshanshan
f0d4d4f2fc fix(talk): use truncateUtf16Safe for LLM-prompt-facing text truncation (#102477)
* fix(talk): use truncateUtf16Safe for snippet text truncation

fast-context-runtime.ts normalizeSnippet and heartbeat-events-filter.ts
buildExecEventPrompt used raw .slice(0, N), which can produce lone
surrogates when truncation boundaries cross emoji surrogate pairs.

* test(talk): cover UTF-16 snippet boundary

---------

Co-authored-by: hailory <hailory@xydigit.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
Co-authored-by: Peter Steinberger <peter@steipete.me>
2026-07-09 08:39:38 +01:00