Repository navigation
Commit aced5f7
authored
fix: address release review findings (#8276)
* fix(desktop): admit browser download saves before reading the body
PUT /api/desktop/tool/file buffered up to 100 MiB of the request body
before the use case checked that the tool call exists, is a running
browser_save_download claimed by the desktop, and belongs to the caller's
run, so any signed-in user could force large reads with bogus toolCallIds.
Add admitBrowserDownloadSave (same operation and binding resolution as
saveBrowserDownload, no claim or audit), following the existing
admitCreateWorkspaceFile pattern, and run it before the body read. The
save use case still re-validates and claims atomically after the read,
so a failed or oversized upload never burns the single-use claim.
* fix(desktop): walk cross-realm shadow roots when resolving upload targets
resolveFileInputTarget climbed out of shadow roots with `root instanceof ShadowRoot`.
Elements in same-origin iframes belong to the frame's realm, so the check was false
for their shadow roots and the ancestor walk stopped at the shadow boundary, failing
browser_upload_file with "no nearby file input". Use the file's duck-typed
`'host' in root` idiom like every other shadow-host hop.
* fix(chat): keep an activity's completed title off runs while it still waits on the user
Every run of a main-lane activity segment received the segment-wide activity,
including its completedTitle. A finished multi-call run before a pending
approval or terminal handoff (which splits the segment into runs) therefore
read the past-tense completed title while the activity was still unfinished.
Runs now receive the completed title only once every call in the segment has
finished; until then they keep the activity's in-progress title and summarize
their own calls. Fully finished activities render exactly as before.
* fix(search): keep partial coverage through persisted search compaction
compactRetrievalCitations kept only citations, dropping data.retrieval, and
stripToolResultOutput applies it on both save and load. A reloaded timed-out
search with no matches therefore rendered "No results", which the live UI and
the tool itself deliberately avoid because partial results cannot establish
absence.
Compaction now keeps a bounded retrieval: { status: 'partial' } marker (never
the full retrieval object), and re-compacting compacted output keeps it.
Complete searches compact exactly as before.
* fix(organization): route chat URLs the same way as organization Home
The chat page gated on (mothershipAvailable || memberScoped) while
OrganizationHome renders nothing without copilot.use, or without Build and
Search. A viewer with copilot.use but neither Build nor Search, and a
Search-only viewer opening an assistant chat, got a blank page. Apply
Home's two redirects (Search when copilot.use is denied, workspace
settings when neither Build nor Search is allowed) before loading the
chat, through one getOrganizationHomeRedirect shared by both pages so
they cannot drift again; the later copilot.use redirect becomes
unreachable and is removed.
* fix(organization): keep a custom date range when Home restores Search results
organizationHomeParsers already reads from/to, but OrganizationHomeContent
passed only source and updated to searchFiltersFromParams, so a Home URL
with updated=custom restored an unbounded search. Pass from/to through,
matching the workspace results view, and add them to the effect deps.
* fix(chat): project desktop tabs in organization Assistant chats
Organization Home passed projectsDesktopTabs: false to useChat in Assistant
mode, which only nulls the native active-tab ids used for the strip's
fallback. ChatResourcePanel still projects the chat scope's browser and
terminal tabs in every mode, and chat link clicks in the desktop app open
those tabs through the same projection, so Assistant chats showed desktop
tabs while ignoring which one the desktop app remembers (the #7793 reopen
behavior). Build Home's options with getMothershipUseChatOptions, like
workspace Home, so tabs project consistently in every mode. Assistant
requests still attach no resources.
* fix(home): make the chat/resource panel divider keyboard-adjustable
The resource panel divider (moved into the shared ChatPanelLayout this release,
identical to main's home.tsx) was pointer-only: a separator with no tabIndex,
key handling, or aria-value*, so keyboard users could not focus or resize it.
Mirror the file text-editor split: the divider is now a focusable separator
with ArrowLeft/ArrowRight steps and Home/End. Both separators now read keys
through one readSeparatorKey helper (modifier and IME guard included). Keyboard widths go through the same MIN/max clamps as the drag
(keyboardPanelWidth next to panelWidthAt), land without the width transition
like the window-resize clamp (shared writeWidthInstantly), are ignored during a
live drag, and claim the resource view like a pointer resize. aria-valuenow/min/
max are written imperatively on focus, key, and drag end, preserving the hook's
zero-render resize design. Focus-visible outline matches the text-editor split.
* docs(rules): scope member avatar aria-hidden to rows that show the name
The settings-pages rule said every member avatar renders aria-hidden because
the name is always beside it. MemberRow shows only the email, so its avatar
correctly stays labelled (role=img, aria-label=name), matching the emcn Avatar
TSDoc. Reword the rule and regenerate the Cursor projection.
* docs(skills): clarify service-mode selector guidance in add-connector
The skill said service mode requires shared selectors, but GitLab (service
mode only) uses plain host/project inputs. Align with the live-search README:
verification is mandatory; shared selectors apply only to resource pickers.
* fix(home): keep a focused divider's value current through window resizes
The window-resize clamp updated the panel width but not the focused
divider's aria-valuemax/valuenow, so assistive tech kept the old bounds
until the divider was focused again. The clamp now also reports to the
divider while it holds focus, including when the pinned width stays
within the new bounds.1 parent 0ede40b commit aced5f7
32 files changed
Lines changed: 861 additions & 202 deletions
File tree
- .agents/skills/add-connector
- .claude/rules
- .cursor/rules
- apps
- desktop/src/main/browser-agent
- sim
- app
- api/desktop/tool/file
- o/[organizationId]
- chat/[chatId]
- home
- workspace/[workspaceId]
- files/components/file-viewer
- home
- components
- message-content/components/agent-group
- hooks
- lib
- browser-agent/application
- core/utils
- mothership/chat
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
8 | 8 | | |
9 | 9 | | |
10 | 10 | | |
11 | | - | |
| 11 | + | |
12 | 12 | | |
13 | 13 | | |
14 | 14 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
252 | 252 | | |
253 | 253 | | |
254 | 254 | | |
255 | | - | |
256 | | - | |
257 | | - | |
258 | | - | |
259 | | - | |
| 255 | + | |
| 256 | + | |
| 257 | + | |
| 258 | + | |
| 259 | + | |
| 260 | + | |
260 | 261 | | |
261 | 262 | | |
262 | 263 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
249 | 249 | | |
250 | 250 | | |
251 | 251 | | |
252 | | - | |
253 | | - | |
254 | | - | |
255 | | - | |
256 | | - | |
| 252 | + | |
| 253 | + | |
| 254 | + | |
| 255 | + | |
| 256 | + | |
| 257 | + | |
257 | 258 | | |
258 | 259 | | |
259 | 260 | | |
| |||
Lines changed: 15 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
912 | 912 | | |
913 | 913 | | |
914 | 914 | | |
| 915 | + | |
| 916 | + | |
| 917 | + | |
| 918 | + | |
| 919 | + | |
| 920 | + | |
| 921 | + | |
| 922 | + | |
| 923 | + | |
| 924 | + | |
| 925 | + | |
| 926 | + | |
| 927 | + | |
| 928 | + | |
| 929 | + | |
915 | 930 | | |
916 | 931 | | |
917 | 932 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
3348 | 3348 | | |
3349 | 3349 | | |
3350 | 3350 | | |
3351 | | - | |
| 3351 | + | |
3352 | 3352 | | |
3353 | 3353 | | |
3354 | 3354 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
6 | 6 | | |
7 | 7 | | |
8 | 8 | | |
9 | | - | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
10 | 14 | | |
11 | 15 | | |
| 16 | + | |
12 | 17 | | |
13 | 18 | | |
14 | 19 | | |
| |||
43 | 48 | | |
44 | 49 | | |
45 | 50 | | |
| 51 | + | |
46 | 52 | | |
47 | 53 | | |
48 | 54 | | |
| |||
92 | 98 | | |
93 | 99 | | |
94 | 100 | | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
95 | 116 | | |
96 | 117 | | |
97 | 118 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
13 | 13 | | |
14 | 14 | | |
15 | 15 | | |
| 16 | + | |
16 | 17 | | |
17 | 18 | | |
18 | 19 | | |
| |||
52 | 53 | | |
53 | 54 | | |
54 | 55 | | |
55 | | - | |
56 | | - | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
57 | 59 | | |
58 | 60 | | |
59 | 61 | | |
| |||
73 | 75 | | |
74 | 76 | | |
75 | 77 | | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
76 | 85 | | |
77 | 86 | | |
78 | 87 | | |
| |||
93 | 102 | | |
94 | 103 | | |
95 | 104 | | |
96 | | - | |
| 105 | + | |
97 | 106 | | |
98 | 107 | | |
99 | 108 | | |
100 | 109 | | |
101 | | - | |
102 | | - | |
103 | | - | |
104 | | - | |
105 | | - | |
106 | | - | |
| 110 | + | |
107 | 111 | | |
108 | 112 | | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
6 | 6 | | |
7 | 7 | | |
8 | 8 | | |
| 9 | + | |
9 | 10 | | |
10 | 11 | | |
11 | 12 | | |
| |||
20 | 21 | | |
21 | 22 | | |
22 | 23 | | |
23 | | - | |
24 | | - | |
| 24 | + | |
| 25 | + | |
25 | 26 | | |
26 | 27 | | |
27 | 28 | | |
| |||
38 | 39 | | |
39 | 40 | | |
40 | 41 | | |
41 | | - | |
42 | 42 | | |
43 | 43 | | |
44 | 44 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
Lines changed: 22 additions & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
69 | 69 | | |
70 | 70 | | |
71 | 71 | | |
72 | | - | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
73 | 76 | | |
74 | 77 | | |
75 | 78 | | |
| |||
602 | 605 | | |
603 | 606 | | |
604 | 607 | | |
605 | | - | |
| 608 | + | |
606 | 609 | | |
607 | 610 | | |
608 | 611 | | |
| |||
892 | 895 | | |
893 | 896 | | |
894 | 897 | | |
| 898 | + | |
| 899 | + | |
| 900 | + | |
| 901 | + | |
| 902 | + | |
| 903 | + | |
| 904 | + | |
| 905 | + | |
| 906 | + | |
| 907 | + | |
| 908 | + | |
| 909 | + | |
| 910 | + | |
| 911 | + | |
| 912 | + | |
| 913 | + | |
| 914 | + | |
895 | 915 | | |
896 | 916 | | |
897 | 917 | | |
| |||
0 commit comments