v0.8.35: cli telemetry, security hardening, desktop app improvements, chat natural language explanations - #7805
Open
waleedlatif1 wants to merge 13 commits into
Open
v0.8.35: cli telemetry, security hardening, desktop app improvements, chat natural language explanations#7805waleedlatif1 wants to merge 13 commits into
waleedlatif1 wants to merge 13 commits into
Conversation
waleedlatif1
commented
Sep 13, 2026
Collaborator
- fix(knowledge): simplify connector management (fix(knowledge): simplify connector management #7788)
- fix(search): bound retrieval and progressively read document evidence (fix(search): bound retrieval and progressively read document evidence #7789)
- fix(ci): bake the CLI telemetry token into the build that bun publish ships (fix(ci): bake the CLI telemetry token into the build that bun publish ships #7790)
- fix(rss): deliver unseen items published before the last poll (fix(rss): deliver unseen items published before the last poll #7792)
- fix(sidebar): unify navigation menus and stabilize hydration (fix(sidebar): unify navigation menus and stabilize hydration #7791)
- fix(search): use compact candidates for filtered vector retrieval (fix(search): use compact candidates for filtered vector retrieval #7794)
- fix(workflows): surface workflow import failures (fix(workflows): surface workflow import failures #7768)
- fix(realtime): compare search replacements independent of object key order (fix(realtime): ignore object key order in search replacements #7769)
- fix(desktop): reopen a chat on the browser tab the user left it on (fix(desktop): reopen a chat on the browser tab the user left it on #7793)
- fix(sso): require an organization when registering an SSO provider (fix(sso): require an organization when registering an SSO provider #7801)
- fix(mcp): always guard the MCP transport and validate on every managed connect (fix(mcp): always guard the MCP transport and validate on every managed connect #7802)
- feat(copilot): show model-authored tool activity (feat(copilot): show model-authored tool activity #7803)
- fix(agent): keep nested tool basic/advanced modes attached to their tools (fix(agent): keep nested tool basic/advanced modes attached to their tools #7804)
* fix(knowledge): simplify connector management * fix(knowledge): keep history collapse accessible
…#7789) * fix(search): bound retrieval and progressively read document evidence * fix(search): protect query output and validate document continuation
* fix(sidebar): unify navigation menus and stabilize hydration * fix(sidebar): simplify organization profile controls
* fix(workflows): show errors when workflow imports fail * fix(workflows): clarify invalid import file errors
…7793) * fix(desktop): reopen a chat on the browser tab the user left it on The resource strip pushed its own last-tab fallback onto the desktop app whenever a chat opened without an explicit selection, overriding the tab the desktop remembers the user was on. The shared desktop-tab hook now switches the native tab only for an explicit selection, adopts the desktop's active tab when the strip is on its fallback, and defers a selected tab that has not landed yet until it does. Chat hydration no longer writes a browser or terminal tab into the URL as a fallback. * fix(desktop): adopt the remembered tab without claiming the user's selection Review round on the reopen fix. A late first report of the desktop app's active tab carries the tab it remembers, not a switch the user made, so it is adopted rather than claimed and agent activity can still take the view on chat open. A move away from a tab the desktop was already showing stays the user's own. Adoption now waits for the chat history to be applied, so the arrival order of the tab list and the history no longer decides which resource a chat opens on, and it skips a tab the strip has already dropped, so closing the shown tab cannot write the closed id back. Closing the shown tab selects its neighbour the way the desktop app picks the next native tab, instead of flashing through the strip's last tab. The two wrapper hooks now share one options type with the strip, and the adopt rule lives in a single helper. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0139YonWmiZUnPMTHoH4PtAJ * fix(desktop): show a selected tab that arrives after the tab list The effect that shows an explicitly selected tab was keyed on the selection alone, so a selection made before the desktop app published its tab list was dropped rather than applied when the tab arrived. It is now keyed on that tab being live as well, which covers the late arrival without a retry ref to arm and disarm. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0139YonWmiZUnPMTHoH4PtAJ * refactor(desktop): align the two tab-adoption paths and drop dead plumbing Quality pass on the reopen fix. The late-arrival adoption now carries the same guards as the hydrated one, so a first report of the desktop app's active tab can no longer override a selection the user made before the tab list arrived. Both guards are pinned by tests that fail when either is removed. The predicate the adopt and claim paths share moved into one helper, so the single difference between them — adoption needs the tab to still be in the strip, following the user does not — is stated once. Removes a ref nothing read and an options interface with no second consumer. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0139YonWmiZUnPMTHoH4PtAJ * test(desktop): give the tab-resource hosts the shared options interface The test hosts took their props through a type alias derived from the hook signature. The repo asks for an interface, and the hook already exports one that is exactly this shape, so the hosts use it directly instead of restating it. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0139YonWmiZUnPMTHoH4PtAJ * fix(desktop): resolve the shown tab instead of writing it back Reopening a chat could show the wrong page for as long as the chat history took to load. The strip wrote the desktop app's remembered tab into the selection from an effect, and that write had to wait for the history or the arrival order would decide what the chat opened on. With the history held back 2.5s, an instrumented run showed the wrong page for 2164ms before it corrected. The rule is now a pure function: an explicit selection wins, otherwise the last resource, except that a desktop-backed last resource defers to the tab the desktop app is showing. Nothing is written back, so the gate, the passive setter and the effect behind them are gone, and the same run now shows the remembered page immediately. A native switch is claimed as the user's against the tab the desktop app was showing rather than the one the strip shows, since with no explicit selection those are now the same tab. Closing the shown tab prefers a neighbour of its own kind, so the strip and the desktop app agree on what comes next. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0139YonWmiZUnPMTHoH4PtAJ --------- Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
…d connect (#7802) McpClient no longer falls back to the global fetch when no validated address is supplied; it always uses the SSRF-guarded transport, pinning only a validated private address. McpConnectionManager.connect validates the destination itself on every dial, reconnects included, instead of trusting a caller-supplied address.
* feat(copilot): show model-authored tool activity * chore(copilot): remove unused outcome title wrappers * fix(copilot): keep model activity outcomes authoritative
…ools (#7804) * fix(agent): keep nested tool basic/advanced modes attached to their tools Tool canonical-mode overrides are keyed by array position, so a reorder or removal must move them with the tools. - Workflow edit engine (v2 operations API, Chat) reindexes modes when a batch rewrites a block's tool list, matching tools by content, then by type - Editor persists the tool list and reindexed modes in one realtime operation instead of two independent writes that could partially persist * fix(realtime): reject locked-block tool updates and tighten new types * test(agent): drop redundant cast in tool mode reindex tests * improvement(realtime): share the writable-block check across subblock writes
Contributor
|
Too many files changed for review (135 files, 100 file limit). Bypass the limit by tagging |
|
The latest updates on your projects. Learn more about Vercel for GitHub. |
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.