Terminal link detection treated the closing `]` of a bracketed IPv6 host
(e.g. http://[::1]:5173) as trailing punctuation and dropped it, producing
unopenable links. Match an optional bracketed IPv6 authority after the
scheme, and never trim trailing punctuation back past that authority.
Avoids regex lookbehind so the mobile terminal WebView can still parse it.
Co-authored-by: Neil <neil@stably.ai>
Replace literal mistranslations with the wording ko.json already uses for the
same English words elsewhere:
- Host: 주인 -> 호스트 (workspace cleanup column and sort)
- Idle: 게으른 -> 유휴 상태 (workspace cleanup agent state)
- Actions: 행위 -> 작업 (artifact list header, terminal link actions search keyword)
- Source: 원천 -> 소스 코드 (branch line total chip)
Pin the values in the Korean key overrides so catalog regeneration keeps them.
Native chat code blocks always used terminalFontFamily, even with "Match
terminal interface" disabled. Use the editor font stack for code blocks
unless matching is on, and include editorFontFamily in the memoized
appearance settings so changes re-render.
Co-authored-by: phatloi0010 <phatloi0010@users.noreply.github.com>
Co-authored-by: Neil <4138956+nwparker@users.noreply.github.com>
A plugin with a worker and status bar items is now started when enabled and kept warm,
like a plugin with hooks, through one shared resident-worker predicate and warmer.
* Open large pasted text and attached text in structured chats
* Read pending pasted text before its host route resolves
* Pass structured attachment eligibility from the owning chat
* Preserve composer and Markdown state when inspecting text attachments
* fix: preserve attachment identity and cancel deferred reads
* test: consolidate phone attachment rendering contracts
* Scope attachment previews to visible chats and share route indexes
* test: consolidate duplicate attachment preview coverage
* perf: share remaining workspace catalog derivations
* feat(chat): open text attachments from structured goal objectives
* fix(chat): reuse preview owner and bind app hooks
* refactor(chat): trim duplicate tests and unused capability initialization
* test(chat): share routing scope mount fixture
* Fix routing performance attribution and folder row imports
* Share attachment capability through its domain module
* Align attachment fixtures and warm routing contracts with current gates
* Preserve relay connection timeout default for ordinary requests
* Share image classification ownership and repair integration fixtures
* Repair real attachment integration fixture boundaries
* Expose e2e compiler diagnostics and prune stale read allowance
* Type the recall fixture row ref as a div
* Keep text attachment capability in its existing capability owner
* Keep image MIME bindings in the media type owner
* Own private bridge response completion at the request boundary
* Complete bridge fixture return and retention types
* Localize native chat text attachment preview controls
* Complete attachment preview localization at presentation boundaries
* Preserve legacy preview locale identity and complete localization controls
* Fix typed mobile host witness lookup
* Commit attachment page edits and reset mobile page scroll
* test(chat): remove duplicate preview localization coverage
* fix(mobile): apply page input font and footer safe area
* fix(chat): commit edited page before admitted navigation
* fix(chat): retain field readiness on pending commit
* fix: preserve attachment field focus until control activation
* fix: restore attachment preview styles and canonical close
* Bind mobile input font role to the central theme
* Type font source fixture cases as tuples
* Attribute inherited owner filter work and qualify folder fixtures
* Keep owner filter fixture input types source-derived
* test: retain attachment capability assertion import
* test: focus attachment coverage on important regressions
* Replace text attachment paging with bounded scrolling and trim tests
* Preserve literal phone attachment whitespace and trim unused test meter
* Keep scroll view refs and measurements out of render
* Keep preview collection independent of native clipboard initialization
* Give the phone scroll fixture coherent measured DOM geometry
* Commit attachment scroll extent before restoring its anchor
* Preserve text viewport geometry across bounded reads
* Unify bounded text scrolling around the viewport
* Preserve the live text anchor across viewport resizing
* Measure committed text viewport bounds from the host
* Preserve live attachment position across native client extent changes
* Use the actual first source block in the resize regression fixture
* Reuse subscription handle type
* Keep attachment effects keyed to their existing triggers
* Keep attachment rows within the committed track
* Allow the full attachment renderer contract to settle
* Open text attachment previews in a large modal
* Preserve attachment modal header layout with primitive-owned styles
* refactor: group workspace creation and preparation owners
* refactor: coalesce concrete owner type imports
* test: preserve IPC default-ref mock at its concrete owner
* feat(browser): guard page commands with an expected URL
* fix(browser): refuse an empty --expect-url and check it on dialogs and the forwarding desktop
* fix(browser): recheck the expected URL right before keys go out
* refactor(browser): drop duplicate session type, dialog alias and per-capability sidecar fields
* chore(browser): satisfy the changed-code gates for the expected URL guard
* fix(chat): name the attachment that expired when a send is refused
The claim step knew which uploads were gone but threw a bare error, so the
refusal could only say "This attachment expired". It now carries each expired
upload's id and file name: every client names them, and desktop marks those
image chips. Older hosts and clients keep today's generic words.
* test(chat): read expired-attachment details through the wire reader
* fix(agents): stop agent rows showing pasted data as their name
Fixes#29842
* fix(agents): keep the board card's task as the raw prompt
The card only shows task when no "You" line exists, so the label never rendered.
* refactor(agents): route activity titles and mobile rows through the row label owner
* fix(dsh): report hooks as partial when a DSH profile cannot load the executor package
* fix(dsh): name only the broken profiles and print hook detail for failing states
* refactor(dsh): fold the profile package check into the installed branch
* refactor: group desktop integration and lifecycle owners
* refactor: preserve runtime literals and mock owner boundaries
* refactor: link historical reliability evidence to current test paths
* refactor: retain the historical lid-sleep baseline path
* Make the agent-message status mark a circle
The corner badge inherited the chat line box, so it drew as a pill, and the working ring's thick stroke closed into a crescent. The badge is now a circle around the status icon, and the medium working mark keeps a full ring.
* Keep the shared working spinner in the status circle
The medium working mark had its own thinner ring. Agent status uses one spinner everywhere, and the message card only changes the circle behind it.
* Open a closed terminal worker's conversation as a chat
* Open closed workers through a separate partyOpen call
Keep partyLocation a pure lookup; clients call partyOpen for a sender and fall
back to partyLocation on older hosts. Adopt from the closed pane's recorded
transcript, test terminal liveness by its PTY, keep follow-ups free of chat-host
installation, and report a possibly-created chat as retryable.
* Bring back a closed chat for a follow-up and match recorded sources by identity only
A follow-up to a worker whose conversation a chat holds reveals that chat in
the background when its tab was closed, so the follow-up is delivered there
instead of being refused. Recorded-source adoption passes only the pane identity
and conversation fields source matching reads.
* Reopen a closed terminal worker as a terminal, not a chat
partyOpen now resumes the closed worker's saved conversation in a new terminal
through the follow-up resume path, reusing a terminal that already holds it, and
answers with the terminal location. Removes the chat conversion and everything
only it needed; follow-up placement is as on main.
* Retry an uncertain worker reopen as the same request
* Resume again when the agent left the reopened worker terminal
* Type the hook row in the closed-worker follow-up test
* Find a closed worker's reopened terminal through the resume claim and hook rows
* Retry an uncertain closed-worker resume as the same request; reuse only a terminal whose hook row names the conversation
* Forget an uncertain closed-worker resume once its conversation reports
* Drop the closed-worker open map; overlapping opens share one resume request
* Tell workers when to message the coordinator, not just where
* Count the brief's one remaining surface mention in the parity test
* Limit the brief's 'only' to messaging the coordinator
* Preserve open overlays when focusing the chat composer
* Fix chat composer focus after launch menus close
* Fix chat composer focus handoff after overlays close
* Fix composer focus after custom overlays close
* Prevent chat composer from stealing overlay focus
Scope recovery overlays to their own pane and let menus dismiss before
returning focus to the composer. This keeps the quick launcher open
when delayed chat actions complete.
* Fix composer focus across nested overlays
Track focus ownership through portaled overlays so the launch prompt can
regain focus while its model list is open. Close the context menu before
inserting a quote so the caret lands after it.
* Fix overlay focus CI regressions
* Complete overlay focus ownership for inline and retained surfaces
* Declare public overlay focus hook return type