Repository navigation
Sync upstream 1.4.214 - #109
Merged
Merged
Conversation
… the user's focus (stablyai#28453) Main-session CDP key and text input on a <webview> guest is routed by the window's focus, so it landed in the user's terminal (stablyai#20595). Embedded guests now get widget key/char events; child-frame focus and untypeable text keep the CDP path after focusing the guest.
…yai#28354) * fix(runtime): save a windowless host's chat tabs in its layout Claude-Session: p2-headless * fix(runtime): remove a chat's saved tab on the index's hidden notice, which every close reaches Claude-Session: p2-headless * fix(runtime): a chat whose record is gone loses its saved tab at startup Claude-Session: p2-headless * test: run the windowless chat-layout host test in the Node runtime project Claude-Session: p2-headless * fix(runtime): remove a chat's saved tab from whichever partition still holds it Claude-Session: p2-headless * refactor(runtime): list saved chat tabs across partitions in the layout module Claude-Session: p2-headless * refactor(runtime): read saved chat tabs straight from the store's partitions Claude-Session: p2-headless * fix(chat-tabs): save a windowless chat tab under its own tab id Review pass: the saved tab reuses the id status and attention address, the close checks for a window before scanning partitions, and the host tests seed readable records with unreadable, other-host and no-index cases. Claude-Session: p2-headless * test(chat-tabs): a window opening a windowless-saved chat reuses its tab Claude-Session: p2-headless * test(chat-tabs): check the saved tab with the lookup a window reuses The window's existing-tab lookup moves to the shared projection so the windowless-layout test exercises it without importing the renderer. Claude-Session: p2-headless * test(chat-tabs): assert the reused tab's identity directly Drops the shared lookup added for the test; two functions already carry that name. Claude-Session: p2-headless * fix(chat-tabs): leave an unstamped chat tab in an SSH partition to that host Claude-Session: p2-headless * fix(chat-tabs): count an unstamped chat tab as this host's only in the local partition A desktop mirrors a remote server's chats into that server's runtime partition without a host stamp; the startup sweep must not delete them. Claude-Session: p2-headless * refactor(chat-tabs): one chat tab writer, one startup match, local partition only Chats run only on local hosts, so their saved tabs live in the local partition: the cross-partition listing and its writer go. Open and close share one layout load, the startup fill and sweep become one function beside the index seed, and the tab filter is the existing savedSessionId. Claude-Session: p2-headless * fix(chat-tabs): restore and sweep saved Claude chat tabs like any structured chat The Claude skip predates Claude structured chats (stablyai#18519, stablyai#18560); an id the host has no record of is already dropped by the readable restorer. Claude-Session: p2-headless
…rent Orca server version (stablyai#28642) A first connect onto a host whose managed server another Orca version started deferred the update (its terminal count needs pairing) and failed the connect. Pair with the running build as it is, before uploading anything, then let the linked update check ask it for its terminals. Co-authored-by: m4air <m4air@Mac.localdomain>
…tablyai#28644) The connection pool replaced any connection that was not fully up (reconnecting, failed, closed by a census) with a fresh one, and the teardown wiped the in-memory password, so background dials after a drop or sleep/wake prompted again. The pool now keeps the sign-in the host accepted and hands it to the replacement for the same endpoint. A password the host refused or re-asked for is never handed on, an edited endpoint asks again, and an explicit disconnect forgets it. Co-authored-by: m4air <m4air@Mac.localdomain>
* Require exact-commit PR checks before agent merges * Give full PR checks a unique required status context * Validate required context ownership on every pull request
…i#28562) * Recover orphan browser processes and clarify blocked updates * Use isolated Electron launch flags for sidecar lifetime tests * Keep update retries fenced while describing blockers * Keep update translations and context clock valid on current main * Use the option context clock restored on main * fix(updater): address status guidance and test launch reviews
…composer (stablyai#28610) * test(native-chat): replay recorded Linux Sogou commits into the chat composer Guards stablyai#26722: keyup-only pinyin, plain Space/digit selector picks (GTK IM and XIM shapes), Process/229 phrase picks, and a client-preedit commit all land in the composer. The recorded fcitx4 shapes do not reproduce the issue. * test(native-chat): read the composer event log through a typed dataset value
…8454) Any press on a <webview> guest moves Chromium focus into it, so an agent click took the user's terminal focus (stablyai#20595). Main now asks the hosting pane to guard focus for each agent press (Orca's click/mouse down and the CDP proxy) and the pane puts it back inside the webview's focus event, and again when the press ends. Offscreen pages keep their native focus.
Adapt Jira rows and sort headers to their panel width so titles remain readable in narrow side panels. Refs stablyai#16627. Co-authored-by: Leopold Tripot <leopold.tripot@gmail.com>
Preserve safe ADF hyperlinks and rich-text marks through the existing Markdown renderer, with escaping and punctuation regressions. Refs stablyai#13604. Co-authored-by: Brennan Benson <79079362+brennanb2025@users.noreply.github.com>
…8592) Expose host-owned verified Jira reads and single-attempt writes through the CLI. Preserve site ambiguity checks, old-host capability refusal, atomic label changes, and uncertainty after failed writes. Refs stablyai#11986 and stablyai#26055. Co-authored-by: Dan Cieslak <dcieslak19973@users.noreply.github.com> Co-authored-by: kokbee <kok2209@gmail.com>
Use one token-based task search implementation on desktop and mobile. Preserve explicit issue/PR qualifiers, distinguish quoted search text, and follow shared reexports in mounted mobile recordings. Refs stablyai#10950 and stablyai#11121. Co-authored-by: MumuTW <42820974+MumuTW@users.noreply.github.com>
Support scoped Jira Cloud API tokens through the configured gateway while keeping self-hosted routing, redirects, diagnostics, and selected-host capabilities bounded. Co-authored-by: Jerome Würf <oss@scharom.de>
Apply Jira edits immediately, keep writes ordered, and retain unrelated hydrated fields when a successful save cannot refresh details. Co-authored-by: Jerome Würf <oss@scharom.de>
Search Jira tasks from Cmd+J with captured execution-owner routing and stale-request protection.
Recognize Jira issue references in workspace creation while retaining site-qualified identity and existing provider parsing. Co-authored-by: Eugenio Valeiras <eugenio.valeiras@gmail.com>
…ai#28590) Show linked workspaces for Jira issues and offer starting another workspace even when one link already exists; preserve site and execution-host identity. Co-authored-by: Jinjing <6427696+AmethystLiang@users.noreply.github.com>
…ocesses (stablyai#28594) Reload externally changed Jira and Linear connection metadata and credentials on the next read using bounded file-identity caches. Existing captured requests and retained result expiry policies remain intact. Co-authored-by: Minho Yi <tisohjung@gmail.com>
Browse Jira on mobile and create linked workspaces through the paired desktop, retaining shared task queries and protecting account/session changes. Co-authored-by: Minho Yi <tisohjung@gmail.com>
… WSL (stablyai#29122) * Add skill install entries for more agents; read every provider home env in WSL Adds table entries for CodeBuddy, Qoder, Kiro (KIRO_HOME), Antigravity and 16 agents that read the shared .agents/skills root. The Antigravity entry replaces its hand-written discovery source. The WSL env probe now reads every table homeEnv in one NUL-terminated login-shell probe, and WSL provider detection probes every table provider's detection commands. * Fence the WSL provider-home probe and reject unusable relocated homes The WSL probe now runs through buildWslCapturedLoginShellCommand, so rc output cannot be read as a home value, bash reads .bashrc exports, and fish falls back to sh. A relocated home at the filesystem root, the user home or an ancestor of it falls back to the default folder on host and WSL. * Treat an unusable WSL guest home as a failed provider-home probe
…t) (stablyai#29181) * refactor(layout): build today's store slices from layout frames (inert) Adds the phase E2a frame applier: published layout frames plus content facts plus the window's view become today's tab, terminal, editor and browser slices, through the shared Serializer and the window's own restore builders. Nothing calls it yet. Publishes the fields the window needs to rebuild those records (terminal launch inputs, browser tab label and creation time, editor file owner) and extracts the pure parts of editor, browser and terminal restore. An equivalence test compares the result with today's startup restore for every stored profile. * docs: name who owns what the applier does not write * fix(layout): keep frontmatter and page handles, default active tab only where restore does * fix(layout): default a group's active tab in every frame workspace, as startup does * fix(layout): keep the published browser tab creation time optional on the wire * chore(layout): move layout-writer baseline entries with the moved restore code
* test(ci): group PTY connection regression suites * test(ci): keep reliability gates linked to grouped PTY suites * test(ci): classify PTY mocks as test support and check live spawn state
…tablyai#29085) * fix(mobile): phones on a host with no window list each terminal once With no window attached, the phone tab list was built from the stored terminal rows as they are, so a leftover row from an older build that repeats another tab's terminal showed as a second tab on the same terminal. Build it from the shared Loader's result instead, as the window and main's other readers do. * perf(mobile): load each stored partition once per loop over worktrees Review: list-all and graph sync hydrate once per worktree, and the Loader reads the whole partition, so each call repeated it. The loops now share one cache for their duration. * docs(mobile): say why the per-loop Loader cache ignores the host id * perf(mobile): run the Loader only for a partition that repeats a row or terminal A partition with no repeated row id and no terminal bound in two mounted panes is built from its raw rows exactly as before, so titles, pane ids and cost there are unchanged. * fix(mobile): compare terminals as the Loader does before deciding to load Review: a relay terminal id reused by a later incarnation is a different terminal to the Loader, so it must not trigger it either. * fix(mobile): a legacy row's terminals repeat by id alone, as the Loader matches them Review: comparing every binding by incarnation missed a legacy row repeating an SSH relay terminal with no incarnation recorded; the Loader's legacy-row check matches raw ids. * fix(mobile): drop only the legacy rows the Loader absorbs, per worktree Replaces the partition-wide Loader swap and its per-loop cache: a phone on a host with no window now differs from main only where it then matches the desktop window, which tests compare across main, the branch and the window. * test(mobile): compare tab groups too in the phone, main and window views
…(build switch, off by default) (stablyai#29185) * feat(layout): add the dark layout.apply channel and route pane splits through main behind ORCA_LAYOUT_OWNER A build made with ORCA_LAYOUT_OWNER=main registers layout.apply: main applies the window's layout command to the stored partition through the shared applyLayoutCommand, minting new ids. A user split then waits for main's answer and mounts the pane id main minted. Every other build substitutes 'window', so neither branch is compiled in. * fix(layout): write only the records a layout.apply command touched A load-then-save rewrite also normalizes records the command never touched. The command's effect is now the diff between the save before and after it, written onto the stored partition record by record. A split whose main reply says a paired server holds the tab splits as today. * fix(layout): write a load-supplied record whole and check that patched partitions reload to the command's result * fix(layout): leave a split to today's path only when the workspace's row names a paired server The split switch point asked which host to route to with a helper that falls back to the focused server, so a focused server could claim a workspace whose row names no owner. Use the same owner test the tab mirror uses. * test(layout): type the split owner mock without a cast
…tablyai#29203) The browser client's UI bridge lacked the four Jira filter methods, so the fallback bridge resolved undefined and filters showed empty and never saved. Route them to the active host, gated on its capability so older hosts report that an update is required. Co-authored-by: Claude <noreply@anthropic.com>
…8923) * feat(native-chat): show Claude's /goal in the goal banner Claude reports a goal only as a synthetic reply in stream-json, so Orca saved it as assistant text and never showed the goal banner Codex gets. Journal Claude's goal replies as the typed goal transition, infer completion when Claude ends a turn on its own, report the goal to clients apart from host goal controls, and let the banner clear it by sending /goal clear. * fix(native-chat): keep a Claude goal open when a person stops the turn A Stop pressed while Claude ran the goal's check ended the turn with a clean result, which read as the goal being met and removed the goal banner. The journal's Stop rule already says when a person's Stop decides how a turn ends; a turn it decides never counts as the goal being met. * fix(native-chat): count Claude goal time from the turn start and title an idle goal 'Goal set' * Fix Claude goal clear reveal and result accounting * Hold Claude goal clear during pending sends * Preserve Claude goal text with status-like phrases * Require host goal support for persisted goal banner * Keep structured session modules within line limits * test(native-chat): give option-read journal doubles the goal read * test(claude): give journal doubles the goal source read
…ra login, not its label (stablyai#29201) * fix(jira): match workspace links by site identity, not account label Jira links saved the account email as accountLabel while the Tasks page source used the site display name, so sameSource() rejected every link and the "Has Workspace" view stayed empty (STA-10654, stablyai#29055). Jira connection identity is hostId + providerIdentity.siteId (per login per site), so link matching, cmd-J workspace lookup and duplicate-link detection now compare siteId for Jira and treat accountLabel as display-only. All Jira label producers share getJiraAccountLabel so labels stay consistent. * refactor(jira): simplify Has Workspace link matching after review Match Jira workspace links by host only in sameSource, since siteId checks downstream already separate logins; give getJiraAccountLabel a plain structural parameter; make the other-login test use a reachable state.
WebKit reports no source frame for an app-initiated load() before iOS 18.5 (WebKit c28b242), so the iOS shell read its own document load as subframe-initiated and cancelled it, leaving the phone on "Opening workspace" forever. The navigation policy no longer takes the initiating frame as an input: the shell's own document loads when its one-shot load flag is up, the URL is the exact document URL, the target is the main frame, and it is not a download, matching the Android copy. Verified on an iOS 18.1 simulator (hang before, workspace opens after) and iOS 26.5 (unchanged). Refs stablyai#28626, STA-10545
* fix(omp): read the cmd fresh-config path by name so the guard survives a variable hand-over On cmd.exe, OMP's fresh-session guard referenced %ORCA_OMP_FRESH_CONFIG%, which cmd only expands while reading the typed line. When the line reaches cmd inside another variable (the setup gate's `<wait> && %ORCA_SEQUENCED_STARTUP_COMMAND%`), cmd expands once, the reference stays literal, and OMP refuses to start with "fresh OMP settings are unavailable". The guard now reads the variable by name with a one-pass for-variable, `for %! in (.) do @if exist "%~$ORCA_OMP_FRESH_CONFIG:!" ...`, so typed and handed-over lines behave the same. The older cmd prefix stays recognized for persisted lines and older hosts. A real-cmd test runs both deliveries in the Windows CI lane. * test(omp): pin the cmd guard's echo suppression and type the smoke's cmd line on stdin The real-cmd test now runs echo on, like a pane, and asserts the config path never reaches stdout, so dropping the guard's @ fails it. The manual Windows smoke typed the line into a batch file, where the guard's %! would need %%!; it now feeds cmd.exe on stdin like a pane does. The guard comment now states the real rule: only %! or %~...! text in the for body changes, and the quoter keeps prompts from forming it.
…ble change) (stablyai#28788) * feat(session-history): the scanner reports its progress to windows The Session History scanner now counts each agent's history files and databases while it lists them, and how many transcripts it has read. Main keeps one progress entry per local scan, tags list results with the scan that produced them, tells the scan's own no-progress deadline apart from other faults, and pushes updates to every window. The preload API exposes getScanProgress and onScanProgress. Nothing reads them yet. * fix(session-history): drop the redundant scan key from list results and progress The scan ID already names the scan a result or progress entry came from, so the key copy on the list result (sent to paired clients too) and on each progress entry was never needed. The key stays only where it is the lookup.
… chat (stablyai#29056) * fix(native-chat): resume conversations of any size in a new native chat Resume in New Native Chat refused any saved conversation over 16 MiB, so long Claude and Codex sessions could not move into a chat. The import now streams the file, bounds each message as it is read, and keeps the newest messages within the same 16 MiB budget; one line is still bounded at 16 MiB. The agent resumes the full conversation itself, so only the chat's earliest messages can fall outside the window. * test(native-chat): adopt preflight refuses one line past the record bound, not a large file * fix(native-chat): bound retained Pi import state and identities * fix(native-chat): keep Pi branch projection responsive * fix(native-chat): classify temporary Pi import table * fix(native-chat): keep Pi resume independent of import scratch cleanup * test(native-chat): match legacy Pi identity by shape
Reuse the imported preload graph with explicit runtime cleanup between cases.
…s but never installs (stablyai#28460) * feat(acp): ACP agents can declare a managed runtime that a start runs but never installs A start resolves PATH and the agent's install folders first, then the newest whole release under Orca's data folder (its completion receipt and member sizes checked); with none it refuses with runtimeNotInstalled instead of downloading. * fix(runtime): tell an unreadable runtime release from a broken one, and point a not-installed chat at the chat itself A transient read error (EIO, EMFILE) no longer counts a working release as incomplete; only definite absence or a mismatch does. The not-installed refusal no longer sends a remote chat's user to this computer's Settings. * fix(acp): a start runs Orca's installed release before a copy on PATH, and a copy elsewhere only beside every file it needs
…ll window (stablyai#28781) * Run clipboard file copy and TLS openssl through process-host * refactor(clipboard): inject runProcess, pass the Windows path as data, add an e2e - clipboard-file-copy builds the process spec itself, so the stdio policy sits next to the wl-copy/xclip knowledge it exists for; the IPC handler passes process-host's runProcess straight through and keeps no wrapper. - A helper's exit is read as data (clean exit or not) instead of being turned into a throw and caught again. - Windows runs a constant Set-Clipboard script and reads the path from the environment, so no path is ever parsed as PowerShell. - Drop the dead tls-certificate rewrite; nothing in the app imports it. - e2e: right-click Copy on Windows, then a real shell paste of the file. * ci(e2e): run the Windows explorer file-copy spec on the Windows runner Route it from the clipboard sources, keep it out of the Linux lanes, and run it in the existing Windows e2e job beside the other Windows-only specs. * refactor(clipboard): tighten the helper seam, tests and e2e after review - runClipboardHelper takes runProcess and a plain ProcessSpec. - One handler test pins the process-host wiring on every host; spec details stay in the unit tests, which now also pin the inherited environment. - e2e: native realpath so an 8.3 runner temp path still matches, paste via process-host, and no toast check that could never fail. - Route the renderer caller to the e2e too. --------- Co-authored-by: Orca Worker <orca-worker@localhost>
…heir real version; a gone server's project can be removed (stablyai#27267) (stablyai#29208) * fix(ssh): a paused move to the managed server says so, servers report their real version, and a gone server's project can be removed (stablyai#27267) Co-Authored-By: Claude <noreply@anthropic.com> * test: type the held-move fixture without an assertion --------- Co-authored-by: m4air <m4air@Mac.localdomain> Co-authored-by: Claude <noreply@anthropic.com>
…tablyai#29214) * fix(ssh): give each machine sharing one home its own managed server state (stablyai#29059) * fix(ssh): key machine homes by machine-id, keep data roots short, recover empty claims --------- Co-authored-by: m4air <m4air@Mac.localdomain>
… worktree switch (stablyai#29210) * fix(remote-terminal): reattach a healthy remote pane promptly after a worktree switch (stablyai#27178) A remote pane whose stream ended while the host still reported its terminal ready waited the whole 15s inventory window before reusing it, and a third end within 60s demanded a replacement handle that never comes, parking recovery with no timer until the ~3 min deadline. Unknown-liveness outcomes on the attach and resubscribe paths also parked for online/resume events that a healthy link never fires. - Reuse a still-ready handle as soon as the host reports it, unless a terminal.send to it is unanswered (it may still come back stale). - Pace repeated ends on the same handle with growing delays instead of requiring a replacement; only ends within 10s of a reattach count. - Schedule unknown-liveness retries on the backoff ladder instead of parking; the existing deadline still latches Reconnect for a genuinely lost link. Co-Authored-By: Claude <noreply@anthropic.com> * fix(remote-terminal): fence an endless same-handle flap once its pacing ladder is spent Each paced reattach marked the pane healthy and reset the recovery deadline, so a handle that ended after every reattach retried forever without ever offering Reconnect. After the last rung it now falls back to the replacement wait, whose deadline latches Reconnect. Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: m4air <m4air@Mac.localdomain> Co-authored-by: Claude <noreply@anthropic.com>
…hind the layout-owner build switch (stablyai#29221) * feat(layout): add the dark layout.apply channel and route pane splits through main behind ORCA_LAYOUT_OWNER A build made with ORCA_LAYOUT_OWNER=main registers layout.apply: main applies the window's layout command to the stored partition through the shared applyLayoutCommand, minting new ids. A user split then waits for main's answer and mounts the pane id main minted. Every other build substitutes 'window', so neither branch is compiled in. * fix(layout): write only the records a layout.apply command touched A load-then-save rewrite also normalizes records the command never touched. The command's effect is now the diff between the save before and after it, written onto the stored partition record by record. A split whose main reply says a paired server holds the tab splits as today. * fix(layout): write a load-supplied record whole and check that patched partitions reload to the command's result * fix(layout): leave a split to today's path only when the workspace's row names a paired server The split switch point asked which host to route to with a helper that falls back to the focused server, so a focused server could claim a workspace whose row names no owner. Use the same owner test the tab mirror uses. * test(layout): type the split owner mock without a cast * feat(layout): draw local and SSH workspace layouts from main's layout stream behind ORCA_LAYOUT_OWNER * fix(layout): keep the frame sync out of window-owned builds' live code * fix(layout): keep each row's live terminal binding and pane state across frames * chore(layout): count the frame applier's layout writes and drop test casts * fix(layout): hold frames while any save is owed, scope the view read-back to rebuilt workspaces * fix(layout): keep the frame sync's module init out of window-owned builds * docs(layout): name the read-back bucket and the failed-save hold
…yai#29126) * Prepare native chat CLI copies from the host record * Apply staged-file lint and formatting checks * Cover pairing replacement before queued preparation dispatch * Reuse CLI failure feedback and complete the pairing test response * Isolate Codex materialization test user data * Preserve native chat CLI copy completion and preparation ownership * test: consolidate native conversation fork contracts * fix(native-chat): refuse a Codex chat fork whose saved account home has no CODEX_HOME path
# Conflicts: # src/cli/bundled-skill-guides.ts # src/cli/handler-group-manifest.ts # src/cli/handlers/file.ts # src/main/menu/register-app-menu.ts # src/main/runtime/construction/runtime-file-command-state.ts # src/main/runtime/files/file-access.ts # src/main/runtime/rpc/methods/files-open-navigation.test.ts # src/main/runtime/rpc/methods/files.ts # src/main/runtime/runtime-file-command-host.ts # src/main/runtime/runtime-notifier-contract.ts # src/main/window/runtime-window-lifecycle.ts # src/preload/api/app-bridge.ts # src/preload/api/ui-bridge-terminal-and-session-tabs.ts # src/preload/api/ui-command-event-api.ts # src/renderer/src/app-shell/use-app-shell-services.ts # src/renderer/src/components/jira-issue-workspace-content.tsx # src/renderer/src/components/right-sidebar/pr-comment-presentation.test.ts # src/renderer/src/components/right-sidebar/source-control/listing/section-action-buttons.test.tsx # src/renderer/src/components/right-sidebar/source-control/listing/section-header.test.tsx # src/renderer/src/components/sidebar/CommentMarkdown.github-attachment-image.test.tsx # src/renderer/src/components/sidebar/MarkdownImageLightbox.tsx # src/renderer/src/components/sidebar/SidebarFilter.tsx # src/renderer/src/components/sidebar/SidebarWorkspaceFilterSection.tsx # src/renderer/src/components/sidebar/sidebar-filter-actions.ts # src/renderer/src/components/sidebar/sidebar-workspace-option-items.ts # src/renderer/src/components/sidebar/visible-worktree-kinds.ts # src/renderer/src/components/sidebar/visible-worktrees.ts # src/renderer/src/components/sidebar/workspace-options-menu-items.tsx # src/renderer/src/components/sidebar/worktree-list/listing/use-filters.ts # src/renderer/src/components/tab-bar/SortableTabContextMenu.tsx # src/renderer/src/hooks/ipc-events/mobile-terminal-close-ipc-bridge.ts # src/renderer/src/i18n/locales/en.json # src/renderer/src/lib/file-type-icons.test.ts # src/renderer/src/store/slices/ui/ui-slice-preference-actions.ts # src/shared/rpc-contract/files-params.ts
…working on upstream's new layout Restore the background terminal launcher upstream deleted (stablyai#28130) as a fork copy for review workspaces, point the PR comment scope at the moved git identity helper, and record in FORK.md that upstream's own --line/--column (stablyai#28240) retired the fork's.
Classify the fork's persisted UI fields for the WSL mover, drop the chat-visual tab type upstream removed and the expandImages prop the fork's CommentMarkdown no longer takes, keep the temporary checkout flag out of upstream's SidebarFilterState, and move fork settings and the close-others hook call out of two files upstream grew to their line caps.
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.
1.4.214 → 1.4.214 (
9c1d5d2fb7..1b1d09cfb5, 475 upstream commits, thirty-five conflicts)package.jsonstill says 1.4.214, so the branch name repeats a seventh time.bundled-skill-guides.ts,en.json: took upstream's and regenerated(
generate:bundled-skill-guides,sync:localization-catalog,sync:localization-runtime-catalog). The fork's keys came back.orca file open --line/--column(feat(cli): open files at a requested line and column stablyai/orca#28240), the same feature as fork feat(source-control): turns and commits preview as a Changes filter #57, andmoved the runtime file commands into domain owners (Typecheck file access and watchers stablyai/orca#27582:
runtime-file-command-host.tsandruntime-file-command-access.tsare gone,construction/runtime-file-command-state.tsandfiles/file-access.tsreplace them). Took upstream's side of every feat(source-control): turns and commits preview as a Changes filter #57 file — CLI spec and handler,files-params.ts,rpc/methods/files.ts,runtime-notifier-contract.ts,runtime-window-lifecycle.ts, the two preload bridges,mobile-terminal-close-ipc-bridge.ts—and deleted the fork-only
reveal-opened-file.ts(+ test),shared/runtime-file-reveal.tsandfiles-open-navigation.test.ts. feat(source-control): turns and commits preview as a Changes filter #57 is marked retired.visible-worktree-kinds.tsandSidebarWorkspaceFilterSection.tsxare gone, filtering lives inshared/workspace-view/workspace-row-filters.tsandcompute-visible-worktrees.ts, and the menurenders from shared option lists. Took upstream's
visible-worktrees.ts,sidebar-filter-actions.ts,use-filters.ts,SidebarFilter.tsx,workspace-options-menu-items.tsxandsidebar-workspace-option-items.ts, then re-applied fork feat(comments): pick an emoji with :name wherever @mentions work #9beside the shared evaluator rather than inside it (so the phone wire and upstream's filter types
stay as they are) — see feat(comments): pick an emoji with :name wherever @mentions work #9 for where each piece now lives — and fork Sync upstream 1.4.214 #7/feat(notes): sent notes stay and agents reply to them in place #8's Linear title and PR
author through
withForkCardDisplayOptions.register-app-menu.ts— upstream added a native-browser-popup branch to the inline Paste item;the fork extracted that item to
app-menu-paste-item.ts, so the branch moved there.handler-group-manifest.ts— upstream added Jira and reference groups; kept them and the fork'sBROWSER_AND_FORK_HANDLER_GROUPSin place ofBROWSER_HANDLER_GROUPS.SortableTabContextMenu.tsx— upstream'snativeChatreplacesstructuredSessionId; kept thefork's
AgentViewSubmenuand its always-on leading separator.MarkdownImageLightbox.tsx— upstream addedonErrorto the old dialog; the fork'sMediaLightboxversion already had it. Kept the fork's.jira-issue-workspace-content.tsx— took upstream'sJiraIssueMarkdown.app-bridge.ts,use-app-shell-services.ts,ui-slice-preference-actions.ts— both sides addedlines; kept both.
pr-comment-presentation.test.ts,section-header.test.tsxand
file-type-icons.test.ts(test: remove low-value coverage and shorten expensive fixtures stablyai/orca#29135, "remove low-value coverage"); insection-action-buttons.test.tsxandCommentMarkdown.github-attachment-image.test.tsxkept thefork's cases with upstream's new mocks.
launch-worktree-background-terminals.ts(refactor(automations): main creates an automation workspace's setup and default tabs stablyai/orca#28130, automations now provision setup in main), which the fork's review-workspace creation
imports. The fork keeps its own copy (see feat(notes): sent notes stay and agents reply to them in place #8).
lib/worktree-git-identity-display.tsmoved toshared/worktree/git-identity-display.ts. A missing-import scan oversrccaught both; run oneafter every sync, since git merges a deleted dependency without conflict.