Repository navigation
Sync upstream 1.4.214 - #174
Merged
Merged
Conversation
…#34171) * fix(gitlab): keep paging merge requests when GitLab omits the totals When total headers are absent, a full response advertises another page to probe and a short response ends pagination. Keep the existing header precedence and unknown total count. Tracked in stablyai#33800 * test(gitlab): cover MR pagination exhaustion and header precedence * test(gitlab): verify unknown-total metadata across list consumers * test(gitlab): cover remaining screen consumers of list metadata * test: use checked GitLab RPC runtime fixtures --------- Co-authored-by: Hotragn <103170876+Hotragn@users.noreply.github.com>
…34173) * fix(tasks): make Linear list section headers collapsible * test(tasks): cover Linear section collapse and keyboard activation * test(tasks): bound Linear section toggle work at scale * fix(tasks): compose Linear section surface with standard button * fix(tasks): keep section keyboard focus inside the row --------- Co-authored-by: Isaac Mello <dzordinetwork@gmail.com>
) * Correct GitLab MR check status for failed and manual pipelines Use the same single-MR read for linked and branch-discovered reviews so a list summary cannot hide a failed pipeline. Preserve lookup failures for strict callers and keep detail reads within the existing branch cache. Set mergeable manual pipelines to neutral without claiming an unrun stage passed; keep blocking manual pipelines pending. Co-authored-by: Son of Odin <2700975-son-of-odin@users.noreply.gitlab.com> Co-authored-by: Emily <hadikcze@gmail.com> * test: cover GitLab MR check status consumers * test: type GitLab MR fixtures from mapper input * chore: document GitLab MR boundary assertion exceptions * test: share GitLab MR producer and consumer fixtures --------- Co-authored-by: Son of Odin <2700975-son-of-odin@users.noreply.gitlab.com> Co-authored-by: Emily <hadikcze@gmail.com>
* fix(gitlab): retain successful hosts from partial auth failures Read rejected auth-status output without treating failed host headings or API error advice as successful logins. Publish positive results through the existing context-owned cache; keep backoff when no login succeeds. Co-authored-by: David Anderson <cantspamdave@gmail.com> * fix(gitlab): preserve discovery retries with partial host evidence * fix(gitlab): escape auth marker for ASCII server bundle --------- Co-authored-by: David Anderson <cantspamdave@gmail.com>
…#34185) * fix(github-project): render linked PR and sub-issue progress values * fix(github-project): probe schema support for project column values * fix(github-project): preserve independently supported project fields * Preserve nullable project values and unsupported fetch concurrency * Exercise project relation payloads through unchanged consumers * Combine project coordination test cache imports * Use checked project payload types in consumer tests * Place project provider column contract in cross-layer tests --------- Co-authored-by: Wooseong Kim <innocarpe@gmail.com>
* fix(tasks): derive preset highlights from the applied query Reuse the parsed query and already loaded viewer login for personal preset matching. Keep the stored preset field for resume and task-kind behavior. Co-authored-by: 0668000615 <wen.xiaosong@xydigit.com> * fix(tasks): limit preset identity matching to known sources * fix(tasks): wait for source identity before matching viewer aliases * fix(tasks): match preset highlights to query tokens Require the effective open state and recognize personal presets by their @me query tokens. Remove viewer identity matching while preserving existing preset persistence and task-kind behavior. Co-authored-by: 0668000615 <wen.xiaosong@xydigit.com> --------- Co-authored-by: 0668000615 <wen.xiaosong@xydigit.com>
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
…ntime host's create (stablyai#34525) A desktop-scheduled automation whose project lives on a managed Orca server sent its dispatch token to the server, which never minted it and rejected every run with "Invalid automation provenance request". The token now goes only to this desktop's own create. Fixes stablyai#34433
…yai#34504) * Add native chat hand-off menu on main * Fix saved chat hand-off observations and RPC exports * Reuse indexed chat tabs for hand-off subscriptions * Match saved-chat clear fixture to current journal API
…tablyai#34500) * Stop unrelated host status publications rebuilding sidebar workspace state * Follow sidebar selector lint conventions * Scope sidebar status reads to mounted consumers * Cover each unrelated sidebar status publication * Fix sidebar isolation lint and formatting * Type the composed sidebar header fixture without assertions * Remove unused React imports from sidebar contract tests * Reuse folder record selector and prune stale focus allowance
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
* fix(chat): link naming failures to chat name settings * fix(chat): hide naming settings link when controls are unavailable
…ablyai#34177) Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
…scan closed (stablyai#34534) * feat(wsl): note why an idle distro stays held, and fail the holder's scan closed When user work keeps the holder from releasing, it writes the first few process names (at most 5) to ~/.orca/wsl-holder-blocked, replaced whole and cleared on release, for the desktop to read later. A /proc without the holder's own entry, or a status file it cannot parse, now keeps the hold instead of reading as idle. * fix(wsl): count an unreadable /proc entry only when it is the user's own Review of stablyai#34534: under hidepid=noaccess root's status files are unreadable, so each read as this user's work and the distro never released. An unreadable entry now counts only when its directory belongs to this user. The holder also clears a half-written note on start and rewrites the note only when it changed.
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
…urce mode (stablyai#34537) * feat(editor): VS Code markdown highlighting and sticky headings in source mode * fix(editor): address review on markdown TextMate highlighting - resolve fence grammars from the first word of the info string - give fence grammars the cold-compile retry budget - fall back to Monarch markdown when TextMate fails to load - bound heading-scan line length
stablyai#34517) * lint: flag whole host-status map selectors * lint: keep whole host-status map findings advisory
…nk (stablyai#34524) decode() collected payload chunks even when no payload was expected, and with expected = 0 every data event ran Buffer.concat over all chunks so far. The 128 MB desktop-reads-slowly flood therefore copied quadratically: ~9 s idle under bun, over 30 s under node or a loaded CI runner, timing the test out. Collection now lives in received(), used only by the tests that check a payload. Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
…nners (stablyai#34560) Only explicit fast_runners callers (manual, hourly/daily/adhoc builds) keep Blacksmith; qualified-orcad-template's cache/save jobs always use ubuntu-latest. Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
* fix(sidebar): drop Claude subagent-view eye icon; badge viewed subagent only Co-Authored-By: Claude <noreply@anthropic.com> * fix(sidebar): hide subagent-view indicator on collapsed rows too Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com> Co-authored-by: Claude <noreply@anthropic.com>
…ls in its side status bar (stablyai#34484)
…lyai#34566) Keep preflight and the unit-test matrix (the PR critical path) on Blacksmith; move routing, aggregation, contract, packaging and mobile checks to hosted standard runners, which are free for public repos under Enterprise concurrency. Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
* Make context and tab menus compact and native-style Shared menu primitives get 13px/24px rows, inset separators, full-size shortcuts, frosted translucency with solid fallbacks, and submenus that level with their trigger. Tab menus keep only meaningful icons and align the rest on one text column via inset. * Keep launch menus and shortcut chips consistent with row text size * Use the primitive label style in worktree menus
…file path (stablyai#34570) * fix(updater): accept aliased supervised serve profile paths * test(updater): cover the service's other casing of the serve profile path Co-authored-by: Eotel <49769982+Eotel@users.noreply.github.com> --------- Co-authored-by: eotel <49769982+Eotel@users.noreply.github.com>
…ai#34588) Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
…ler cache (stablyai#34576) * ci: warm hosted runner caches and drop the serve-switch installer cache * ci: seed only restored caches from hosted warm legs * docs(ci): hosted dev builds and no larger runners --------- Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
…#34773) Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
…ai#31180) * fix(native-chat): a refused queued message still blocks the queue when its card write fails Every reader of a queued card goes through one derived view of the journal's dispatch facts, so a card whose message was refused reads as returned even when its card-table update and heal both failed. One decision and one writer store the derived state for every action. * refactor(native-chat): keep each queued message in the chat's journal, not a second table A queued message lived in its own SQL table, and a hook that may be skipped copied each refusal from the journal into it. When that write failed, a refused card vanished: the cards behind it sent, and its Send and Delete did nothing. Each queued message is now a `queue` row in the chat's journal beside the submission that hands it off and the dispatch row that answers it. The reducer folds the card from those rows, so a refusal returns the card and holds the cards behind it with nothing written, and replay reads the same. Every action writes its own rows in one transaction. Cards an earlier build stored are read through the same classification until they move: each action moves its own card, and a bulk import runs once per open. A new epoch restates every card still owed an answer in the transaction that deletes the old rows. The settlement hook and its savepoint, the open-time heal, the drain's heal and the derived-card view are gone. The published card list is unchanged. * test(native-chat): adapt the queue tests to cards kept in the journal Cards are written through the journal, so tests queue them with their body alone and hand them off under their real fingerprint. Tests of the removed settlement hook, heal and SQL store are deleted; the text-update spec now covers the edit decision alone, and a test of an earlier build's stored holds seeds the legacy table and reads the imported cards. Rolling over an epoch now keeps a card whose hand-off was never handed over, so that test checks the retried id never sends rather than that nothing sends. * test(native-chat): a refused card holds the queue through rewind, a new epoch and a restart One whole-flow test through the host: the refusal writes no card row, a rewind that retires the refused hand-off and a rolled-over epoch keep the card returned, a restart and Resume send nothing behind it, its own Send refused again still holds the queue, and its Delete releases the next card in order. * test(native-chat): an earlier build's queued cards move into the journal once, each read the same One mixed-import test through the host. The first open's import fails and moves nothing, yet every card reads as it will; Delete and Send each move only their own card. The next open moves the rest in one transaction, writing a refusal only where its hand-off is gone, nothing for answered cards, and leaving an unreadable row on disk. A later command turn spends a moved command card, a third open writes nothing, an old Delete replays from its receipt, and a chat with only answered legacy rows clears them in a delete-only transaction. * test(native-chat): adapt typechecked tests to cards kept in the journal The row-kind table lists a queue row, the clear and legacy-import tests match the current signatures, and the downgrade test keeps only the leftover-send case: a queued card is now a newer-version journal row an older build keeps read-only, and users don't downgrade. * refactor(native-chat): drop the journal row writer's unused transaction hook No caller passes one since the queue's savepoint bookkeeping left. * test(native-chat): downgrade probes write rows at the version older builds read The highest version this build reads is now 4, the queue row's. A newer build's row in these probes is written at version 3 so the older build meets its kind, not a newer version, and the Stop-event probe hands the older build the rows as stored, since a read raises each row's version. * test(native-chat): unit tests follow the queue row's version 4 The legacy-import test opens real SQLite, so it runs in the Node runtime project. The newest version this build reads is now 4, and a read raises a row's version to it, so the turn-lifecycle test no longer pins the in-memory version (the written one stays pinned by journalRowSchemaVersion). * fix(native-chat): one batch echoing two refused queued messages spends both The per-row delivery check returned only the first waiting card an echo proved delivered, so when one settlement carried echoes for two cards the second stayed waiting and was sent again. It now returns every card the row proves delivered, and the fold withdraws each; replay folds the same. * fix(native-chat): a rewind moves an earlier build's cards into the journal first While the open's import had failed, an earlier build's card that read as refused through its hand-off lost that reading when an in-place rewind retired the hand-off: it disappeared and the card behind it sent. The rewind now adopts every legacy card ahead of its tombstones and deletes their rows in its own transaction, as an epoch replacement already does, so the fold latches each card's reading before its hand-off is gone. * fix(native-chat): keep an earlier build's card whose hand-off is still unconfirmed The import dropped a legacy card handed off as a send whose delivery was unknown, though the fold keeps such a card linked and a later refusal returns it. The import now keeps every card whose hand-off a later row can still answer, through the same check the reducer folds dispatch rows by. * fix(native-chat): one delivery echo withdraws at most one queued card One provider echo proves one delivery, yet it withdrew every waiting card with the same text whose hand-off was refused, so a second identical card was lost. The fold now pairs each echo with one card: on its own row the earliest-positioned match no other echo of that row took, and for a card that waits again the earliest applied echo no card has taken. Paired echoes live in the fold's state, so live and replay pair the same; readers of cards not yet imported work on a copy. * fix(native-chat): a queued message handed to the agent is sent again only on proof it never got it Pressing Stop after Orca handed a queued or steered message to the agent, before the agent confirmed it, put the card back in the queue, and Resume or the next send sent it again. A check matching the agent's echo of the text was the only guard against a double send, and it kept trading a resend for a lost card. Whether the card waited again was decided by the rejection's category, not by proof the agent never got the message. A refused hand-off now waits again only where Orca proves the agent never received it: the host still held it, or whoever settled it recorded that. A failure still returns the card and holds the cards behind it. Anything else may have reached the agent, so the card is spent and its message reads as sent, derived on every fold from the stored rejection: with the turn it was answered into, as that turn's unconfirmed message where it was handed over; withdrawn before any turn opened, as a person's own send a Stop took back. The reopen mark ignores a recovered doubt, and the restart reconciler no longer judges a queued hand-off unsent from what history lacks. The echo text matching and its pairing are deleted. A close or quit while the agent starts settles sends with the unrun hold. The host hands nothing to a child before its start answers (structured-agent-session-delivery-loop.ts: a handover needs phase ready), so such a send went to an earlier child and may have run: it now reads as sent instead of waiting again. * fix(native-chat): Claude's report that it removed a queued message unrun lets the card wait again Claude says when it removed a send without running it: the interrupt receipt's cancelled list, or a command_lifecycle cancelled, discarded or refused frame for a command that never started. Every one settles through rejectClaudeDispatchWaiters, which now marks the settlement unrun. For a queued card's hand-off the host records that as proof the agent never got it, so the card waits again under the queue's pause. A direct send keeps the plain refusal: there the proof would owe it as stopped history. * fix(native-chat): an earlier build's card stopped after hand-over follows the same rule on upgrade Earlier builds put a card back to waiting after any refusal without a verdict and cleared its link, so a card the agent may already have would be sent again after the upgrade. The card's own hand-offs in the journal decide now: unchanged and last sent as one that may have reached the agent, it is spent on that hand-off and its message reads as sent; edited or sent again since, it is held for its own Send under a host-only marker that publishes as a plain hold; with no hand-off in doubt, including one that never left Orca, it waits as before. The import writes a card spent on a hand-off in doubt, so its message shows. * fix(native-chat): read a queued row's hand-off before the lookup that uses it The lookup's callback lost the narrowing of the row's change, which the mobile test typecheck rejects. * test(native-chat): a card steered into a turn a Stop ends stays sent in the Stop tests Three tests pinned the old rule, that a card handed into a running turn comes back to waiting when a Stop ends it. Under the new rule nothing proves the agent never got it, so the card is spent: with the turn named, its message reads as that turn's unconfirmed one; without, as a send the Stop took back. Neither is ever sent again. * fix(native-chat): a queued message stopped before Orca handed it to the agent waits again A Stop that aborts a hand-off after its row is written but before the agent call now records the withdrawal as never reaching the agent, for queued hand-offs only, so plan D's rule returns the card to waiting under the Stop's pause instead of spending it. Direct sends keep the plain withdrawal (the flag would owe them as stopped history). The agent's own refusal while aborted is kept rather than overwritten, and an abort thrown during the call stays in doubt. * fix(native-chat): a queued message stopped while the agent prepares it waits again The abort signal reaches only an adapter's preparation (its options, the previous turn opening), never its write, so the signal's own reason thrown back is the adapter saying nothing was written. The handover now reads that, for queued hand-offs only, as never reaching the agent, so the card waits again under the Stop's pause. Claude no longer wraps that abort as an option refusal, which had returned a stopped card as a refused one blocking the queue. A real refusal keeps its cause and its barrier; any other throw stays in doubt and is never resent. * test(native-chat): the usage-limit Continue backlog case writes its card through the journal queue Main's stablyai#30396 wrote its backlog card with the stored fingerprint and host-instance stamp the journal queue derives instead; the card the Continue must yield to is the same waiting card. * test(claude): the real-CLI queued Stop expects the unrun mark Claude's cancelled-unrun receipt carries * feat(mobile): edit a queued message's images on the phone: remove or attach * fix(mobile): gate queued image edits on the host reader verdict * test(mobile): declare the upload fixture chat mode * fix(native-chat): retain spent legacy messages when import fails * fix(mobile): reveal the full queued image editor on open * fix(mobile): invalidate queued editor geometry without a render ref write * refactor(chat): prepare composer drafts and measured queue dragging * feat(native-chat): add conditional queue removal and authoritative reordering * feat(native-chat): move queued edits into the normal composer on desktop and phone * fix(native-chat): own complete phone drafts before authoring * fix: preserve submitted composer drafts across storage replacement * fix composer validation and mobile CI diagnostics * fix mobile composer test contracts and diagnostic output * Capture mobile test compiler diagnostics in CI * Fix queued message contract typing and English strings * test: complete queued extraction transport fixtures * refactor: separate composer skill binding from send mutations * fix(mobile): grant draft storage within route limits * fix(native-chat): settle each draft save on its own and publish complete composer drafts Phone: a queued Edit copy no longer consumes the save that later typing owns. Each ordinary save and the exact copy settle only their own result; an explicit save waits for its own pending write, and a failed or retired write never schedules another or revives the copy. Desktop: a pasted-text leaf no longer shifts which selected file binds where, and a hand-back held during an IME composition reaches the store only merged with the visible editor document, including writes the editor admits without an update and the composition settle. * fix(native-chat): import the draft type once in the draft cache * test(mobile): type the held-write state without an assertion * test(native-chat): assert the handed-back file on Send without reading a typed transport as a mock * test(mobile): pass main's agent-confirmed flag to the submitted-files harness * fix: reveal queued reorder grip on touch screens * fix: save reopened phone drafts and batch reorder measurements * test: use an explicit React module type * Preserve queued message sortable identities on unchanged renders * Prevent stale queued drag completion after unmount * fix(mobile): hand off navigation across session workspaces * test(mobile): use resolved session identity in dictation fixture * feat: edit queued messages inline with the chat composer * fix: normalize queued edit skill ownership * fix: retire phone skill selections with the sent draft * fix: consolidate queued edit module imports * fix: separate edit save action and stabilize image callbacks * fix: complete phone inline composer integration * fix: retain same-name queued skill selections * fix: complete desktop queued composer integration * test: use typed phone composer host lookups * fix: include queued edit localization keys * Preserve inline edit input across save and attachment completion * Preserve complete queued edits across delayed saves * Preserve queued edit input across delayed completion * Complete queued edit lease loss and pending cancellation * Use recognized queued edit test fixtures * Consolidate queued edit imports and type host test spy * Print mobile test compiler diagnostics on ratchet failure * Correct queued edit integration fixture types * fix: keep queued edit placeholder independent of readiness * Fix queued edit compiler fixture boundaries * Align upload completion test with ordinary insertion * Combine mobile composer draft imports * Load queued edit host fixture during test collection * Size inline phone queue editor to available space * Use typed scroll components in phone presentation contract * Save typed text in a queued edit as written The inline editor is the chat composer, so it keeps the composer's own identity model and no longer refuses Save for text that looks like a command. Command rows picked from the menu are still refused, Enter still means Save, and Edit never sends or runs anything. Regression tests cover Undo after deleting an accepted command or skill pill, a scanned skill named like a command, two saved files behind one token, and typed command text saving literally. Also fixes two merge leftovers in tests: a missing import and a fixture that stored the whole menu row as a skill. * Keep ordinary sends on the main composer contract * Fix mobile composer imports and fixture loading * Consolidate queued edit imports and duplicate regression * Restore ordinary send catalog short circuit and repair test boundaries * Preserve returned rich drafts through send acceptance * Remove obsolete queued editor strings from new locales
…e host's server update during a move (stablyai#34823) * fix(wsl-mover): settle an interrupted move automatically, and hold the host's server update during a move An app update or crash between sending a move's copy and the host's commit leaves a `blobs-transferred` record. Startup recovery has no host to ask, so the projects stay fenced, and the automatic mover only previewed, which refuses an in-flight move, retrying forever. The projects stayed read-only until the user started the move from the dialog. The automatic mover's preview now settles that record first (through the host: back to zero, or forward when the host committed), holding the distro's run while it does so it never races a move the user starts. The dialog's preview stays read-only. The preview moves to its own module. A Settings Update or Force, or any reconnect, could also redeploy the host's server in the middle of a move, cutting it off (safe, but the move is lost). Once a running move has journaled, a version-changing redeploy now keeps the running server and reports the update as waiting for the move, mirroring the SSH path's skip while migrating. The move's own first connect, before it journals, can still update an outdated server. * fix(wsl-mover): an automatic settle never reloads the window, and never holds its own host update Review of stablyai#34823: - A settle that finds the host committed ran the desktop rewrite, which reloads the window past its unload veto. From the automatic mover it now records the commit only (the projects stay fenced), and the next start's rewrite pass finishes it before any window opens. A move the user starts still finishes at once. - The server hold counted any unfinished record of the distro, so an automatic settle of an old record with an outdated server was held, refused for an update, and retried the same way. The hold now counts only the cutover the running move journaled itself. * fix(wsl-mover): let the user finish a committed move in-session; park the automatic mover meanwhile After an automatic settle records a commit for the next start, nothing could finish it in-session: the user's Move refused as already in flight and the orchestrator retried for nothing. - A settle that finds the head committed but not yet rewritten on this desktop finishes it now when the user asked (their Move, or the status line's Retry), returning the existing "finished an earlier move" answer; the automatic mover still leaves it for the next start. - The automatic refusal carries detail `finish-pending`, which parks the distro (new reason `finish-pending`) instead of retrying; the next start, whose rewrite pass finishes the move before any window opens, puts it back to pending. - The park rules move to wsl-move-orchestrator-park.ts. * fix(wsl-mover): give the finish-pending park its own status line Main's move status line (stablyai#34676) names every park reason; the finish-pending reason this PR adds needs one: the earlier move is done on the host, and finishes here at restart or with Check again.
…open on the chat's host (stablyai#31781) * fix(native-chat): open sandbox: images and files on the chat's host Agents sometimes cite files they wrote as sandbox:/abs/path. Markdown sanitizing dropped those addresses, so the chat showed only alt text and an inert link. Chat Markdown now rewrites sandbox: links and sandbox:/file: images to the chat's own file hrefs before sanitizing, and the shared href router reads sandbox:/abs as the absolute path on the chat's host. A paired host now grants a chat client a read-only exact-path grant for any host file the chat links, instead of searching the chat transcript for the path. The search missed structured chats, Markdown link targets and older replies, and guarded nothing: a paired client can already run commands on that host. The grant still refuses network shares, device paths, hardlinks, pipes and sockets. Desktop chat links and images now send their chat to the host, so files outside every workspace on a paired host open and render. A chat link the host does not have is reported missing there and never read from this computer. * Fix chat file reference and granted file actions * Keep granted chat files on existing read-only tab route * Remove accidental package manager lock metadata * Match WSL artifact descriptor fixture to regular file stats * Fix canonical host image grant acquisition * Fix host image test transport request typing * Drop sandbox: address handling from native chat links sandbox:/mnt/data placeholders belong to a hosted code tool that swaps them for its own download links; they never name a file on the chat's host.
…ai#34776) * perf(browser): throttle idle guests between active operations * perf(browser): lease only the guest for non-capture agent commands Keep the renderer paint hold, host unthrottle, and host re-hide readback on capture paths only, and never let the one-way paint-hint send fail the capture. * style: format bridge paint-hold test --------- Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
…/2) (stablyai#34694) * feat(wsl): admit no new WSL host or move in serve-only Main refuses wslHosts:add while the internal gate is closed and reports acceptsNewWork in the WSL host capability; moves already need the open gate. The renderer hides Add WSL distro and every Move entry point once main says serve-only, while saved hosts keep their Connect and Remove. * fix(wsl): offer no new WSL host or move until main answers the capability The renderer's acceptsNewWork now starts false, so Add WSL distro and the Move entries never flash in serve-only before the capability reply. * fix(wsl): point the WSL-bridge chat refusal at Add WSL distro only when it is offered In serve-only Add WSL distro is hidden, so the refusal keeps its terminal-only words there. * test(wsl): give the move status-line test's hosts mock the new-work hook stablyai#34676's test mocks use-wsl-hosts-enabled; WslHostsSection now also reads useWslHostsAcceptNewWork, which follows the same gate there.
…removed (stablyai#34914) stablyai#34650 removed dashboardPopout.terminal.closed from en.json, but ru.json, tr.json and zh-Hant.json kept it, so verify:localization-catalogs fails on main ("extra: dashboardPopout.terminal.closed"). Drop it from those three. No other locale has extra keys; ru's _few/_many plural forms are expected.
…#34675) * fix(terminal): allow automation during phone control * test(terminal): specify driving input in IPC admission fixture * test(terminal): delegate preview input through host admission
…tablyai#34774) Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
* fix(terminal): preserve Codex exit queries across snapshot restore * fix(terminal): replay owed queries from discarded output and superseded replays - Mark yielded queries discarded when ACK overflow trimming, the recovery cutoff, or snapshot-buffer overflow drops their output unsent, and replay them after the covering snapshot (including the ACK recovery snapshot). - Purge snapshot query replays and escape-tail frames still queued behind the ACK window when a newer snapshot is published, and put new replays at the head of the ACK queue so they follow their snapshot. - Share isPrimaryDeviceAttributesQuerySequence across DA1 call sites. - Move replayed-query settlement into settleReplayedYieldedQuery. * fix(terminal): replay DA1 still batched when an ACK recovery snapshot covers it * test(terminal): type the overflowed initial-snapshot stream fixture * test(terminal): give the host-chain recovery stream fixture its required query and batcher state
…lyai#34775) Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
… under max-lines (stablyai#34929) * fix(i18n): drop queued-message keys stablyai#31180 removed from en stablyai#31180 removed components.native-chat.queuedMessages.cancelEditing, .pasteOrDropImages and .saveNeedsContent from en.json; tr.json, added since, still carried them, so the locale catalog check failed on main. They are the only stray keys in any locale. * fix(lint): split runtime-file-read-client under the max-lines cap Move the remote chunked-download helpers into runtime-remote-file-download.ts so runtime-file-read-client.ts is back under the 300-line lint cap. No behaviour change.
…ai#34907) * fix(export): cancel PDF work when requesting document retires * test(export): assert success on non-retired repeated export cycles --------- Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
…4896) Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
# Conflicts: # config/electron-builder.config.cjs # src/cli/bundled-skill-guides.ts # src/main/ipc/filesystem/filesystem.ts # src/main/local-worktree-removal-recovery.test.ts # src/main/local-worktree-removal-recovery.ts # src/main/menu/register-app-menu.ts # src/main/runtime/runtime-file-watcher-removal.ts # src/main/runtime/runtime-interrupted-local-worktree-removal.ts # src/main/startup/main-process-ipc-bootstrap.ts # src/main/updater/updater-release-feed.ts # src/main/updater/updater-setup.ts # src/main/window/main-window-shortcut-routing.ts # src/main/worktree-failed-removal.test.ts # src/main/worktree-removal-leftover.ts # src/renderer/src/app-shell/AppWorkspaceShell.tsx # src/renderer/src/app-shell/use-app-shell-services.ts # src/renderer/src/app-shell/use-global-keybindings.ts # src/renderer/src/assets/main.css # src/renderer/src/components/QuickOpen.tsx # src/renderer/src/components/diff-comments/DiffCommentCard.tsx # src/renderer/src/components/diff-comments/DiffCommentDraftCard.test.tsx # src/renderer/src/components/diff-comments/DiffCommentDraftCard.tsx # src/renderer/src/components/diff-comments/DiffCommentPopover.tsx # src/renderer/src/components/diff-comments/diff-comment-popover-position.test.ts # src/renderer/src/components/diff-comments/diff-comment-popover-position.ts # src/renderer/src/components/editor/DiffViewer.tsx # src/renderer/src/components/editor/MonacoEditor.tsx # src/renderer/src/components/editor/diff-navigation-context.tsx # src/renderer/src/components/editor/editor-autosave.ts # src/renderer/src/components/editor/useDiffViewerFirstChangeAutoScroll.ts # src/renderer/src/components/editor/useEditorPanelDiffContentLoader.ts # src/renderer/src/components/native-chat/use-native-chat-context-menu.tsx # src/renderer/src/components/right-sidebar/HostedReviewActions.tsx # src/renderer/src/components/right-sidebar/activity-bar-overflow.test.ts # src/renderer/src/components/right-sidebar/checks-panel/active-content.tsx # src/renderer/src/components/right-sidebar/checks-panel/checks-list.tsx # src/renderer/src/components/right-sidebar/checks-panel/comment-group.tsx # src/renderer/src/components/right-sidebar/checks-panel/comments-list.tsx # src/renderer/src/components/right-sidebar/checks-panel/use-checks-panel-ai-acknowledgement.tsx # src/renderer/src/components/right-sidebar/checks-panel/use-checks-panel-comment-mutations.tsx # src/renderer/src/components/right-sidebar/pr-comment-presentation.ts # src/renderer/src/components/right-sidebar/right-panel-comment-composer.ime-enter.test.tsx # src/renderer/src/components/right-sidebar/right-panel-comment-composer.tsx # src/renderer/src/components/right-sidebar/right-panel-comment-focus-timers.ts # src/renderer/src/components/right-sidebar/source-control-branch-section-heading.test.tsx # src/renderer/src/components/right-sidebar/source-control/listing/branch-entry-row.tsx # src/renderer/src/components/right-sidebar/source-control/listing/section-header.tsx # src/renderer/src/components/right-sidebar/source-control/listing/use-file-listing.ts # src/renderer/src/components/right-sidebar/source-control/notes/diff-comments-list.tsx # src/renderer/src/components/right-sidebar/source-control/panel/branch-context-row.tsx # src/renderer/src/components/right-sidebar/source-control/panel/commit-surface.tsx # src/renderer/src/components/right-sidebar/source-control/panel/panel-content.tsx # src/renderer/src/components/right-sidebar/source-control/panel/panel-ready.tsx # src/renderer/src/components/right-sidebar/source-control/panel/use-panel-view-state.ts # src/renderer/src/components/right-sidebar/source-control/sync/use-base-refs.ts # src/renderer/src/components/settings/repository/RepositoryPane.tsx # src/renderer/src/components/sidebar/CommentMarkdown.tsx # src/renderer/src/components/sidebar/MarkdownImageLightbox.tsx # src/renderer/src/components/sidebar/WorktreeCardPorts.tsx # src/renderer/src/components/sidebar/comment-markdown-element-renderers.tsx # src/renderer/src/components/sidebar/comment-markdown-github-attachment-media.tsx # src/renderer/src/components/tab-bar/EditorFileTab.tsx # src/renderer/src/components/tab-bar/SortableTabContextMenu.tsx # src/renderer/src/components/tab-group/tab-drag-pointer-sensor.ts # src/renderer/src/components/terminal-pane/TerminalPaneHeaderOverlay.tsx # src/renderer/src/components/terminal-workspace-editor-shortcuts.ts # src/renderer/src/components/ui/textarea.tsx # src/renderer/src/components/virtualized-list.tsx # src/renderer/src/i18n/en-runtime-required.json # src/renderer/src/i18n/locales/en.json # src/renderer/src/i18n/locales/es.json # src/renderer/src/i18n/locales/fr.json # src/renderer/src/i18n/locales/ja.json # src/renderer/src/i18n/locales/ko.json # src/renderer/src/i18n/locales/pt.json # src/renderer/src/i18n/locales/zh.json # src/renderer/src/lib/monaco-setup.ts # src/renderer/src/store/slices/ui/ui-slice-contract-preferences.ts # src/shared/github/check-types.ts # src/shared/github/comment-types.ts # src/shared/repo-types.ts # src/shared/worktree/card-properties.test.ts # src/shared/worktree/meta-types.ts
- Upstream moved the filesystem IPC, parcel watcher and source-control section order modules; the fork's review-attributes handler, language-server watcher and Changes list import the new paths. - Upstream's stable-release fallback hardcodes stablyai; the fork's release URLs now live in updater-release-repo.ts (the prerelease feed hit its line cap) and the fallback derives from it. - The native chat View item takes the now-optional shortcut label. - The Claude web error card gets its own localization key: upstream renamed the shared one's text.
- Shortcut titles: upstream's settings copy now requires a title per action; the fork's actions get theirs from fork-keybinding-title-copy.ts. - Settings transfer classifies upstream's new orcadRetained, browserDevToolsDock and pendingRuntimeRepoRemovals fields. - Upstream API changes: merge-method labels come from getPullRequestMergeMethodLabel, and note targets need the structured chat names. - Line caps: the fork's IPC registrations move to register-fork-core-handlers.ts and the fix-checks background surface to fix-checks-agent-surface.ts; the Auto-picked row is a memo component, so upstream's send-menu test takes upstream's copy unchanged. - Locale catalogs drop the 31 keys only UI the fork removed referenced. - fork-verify scopes upstream's changed-file ratchets to the fork's diff against upstream/main; a sync's diff against origin/main overflowed their git buffer.
Upstream's flaky-test ratchet, now scoped to the fork's own diff, flags sleeps and wall-clock reads in nine fork test files. Unit tests use fixed timestamps, fake Date and vi.waitFor; the e2e pauses that prove an absence keep their wait with an ast-grep-ignore reason.
Owner
Author
|
Sync automation stopped before shipping: main moved during the run, so a fast-forward is impossible.
To finish: merge (or rebase) |
….4.214 sync Upstream deleted safe-react-node-view-renderer with its Tiptap bump, so the video node uses the stock ReactNodeViewRenderer. The stepper test moves to its own file to keep the image-preview test under its line cap.
…ved strings everywhere
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 (
293bfe795d..36d295628e, 1058 upstream commits, eighty-three conflicts)package.jsonstill says 1.4.214, so the branch name repeats an eleventh time; the earlier pullrequests for it are merged, so a new one is opened on the same name.
the conflicted files. Hunks where upstream changed only comments kept the fork's code (with the
old comment); hunks where the fork changed only comments took upstream's. A diff3 conflict style
(
git checkout --conflict=diff3) makes those easy to tell apart.bundled-skill-guides.ts,en.json,en-runtime-required.json, thesix translated locales: took upstream's and regenerated (
pnpm install,generate:bundled-skill-guides,sync:localization-catalog,sync:localization-runtime-catalog).The RPC catalog was already current.
updater-release-feed.ts— upstream's fallback now pins the latest stable tag(
fetchLatestStableReleaseTag, hardcoded to stablyai) instead ofreleases/latest/download.The fork returns early on
ORCA_UPDATE_FEED_URL, and a fork fix commit derives the stable-taglookup from the release repo too. The feed file was past its 300-line cap, so the fork's URL
derivation moved to
updater-release-repo.ts; the Verify grep infork-verify.ymlfollows it.updater-setup.ts,runtime-file-watcher-removal.ts,main-window-shortcut-routing.ts,main-process-ipc-bootstrap.ts,use-app-shell-services.ts,ui-slice-contract-preferences.ts,repo-types.ts,panel-content.tsx,monaco-setup.ts,tab-drag-pointer-sensor.ts,checks-list.tsx,use-checks-panel-comment-mutations.tsx,branch-entry-row.tsx: both sidesadded lines or imports; kept both.
filesystem.tsandRepositoryPane.tsxmoved intoipc/filesystem/andsettings/repository/;took the moves with the fork's imports re-pointed (
PythonEnvironmentSectionandfork-repository-sectionsstay insettings/).register-app-menu.ts— upstream moved Reload / Force Reload / DevTools intocreateAppMenuReloadAndDevToolsItemsand quit intocreateAppMenuQuitItems. Took both; thefork's DevTools-on-the-window item is gone, and Paste stays in
app-menu-paste-item.ts.not empty" included, which is what the fork's Finder fix did, so
local-worktree-removal-recovery.ts(+ test) is upstream's. Upstream also added native Windows removal;
worktree-removal-leftover.tsand
runtime-interrupted-local-worktree-removal.tskeep the fork'sprovesFailedRemovalLeftoverbeside it (off the native path).
worktree-failed-removal.test.tsis upstream's, which droppedthe retry tests the fork's leftover cases sat in. This leftover-folder work is not yet listed in
What this fork owns.
use-global-keybindings.ts— upstream folded the editable/floating-terminal checks intoglobalShortcutTargetYields; the fork's group-focus chord runs just before it.HostedReviewActions.tsx— upstream reworked stacked-PR merging; kept the fork's panel withoutmerge buttons (§13).
CommentMarkdown.tsx— upstream's math rendering inside the fork'sMediaGalleryProvider.section-header.tsx— upstream's pluralized conflict count in the fork'sheader.
TerminalPaneHeaderOverlay.tsx— upstream'scanCloseTerminalPaneplus the web-view leafcheck.
textarea.tsx— fork'sseamlessbeside upstream'scomposite.activity-bar-overflow.test.ts,source-control-branch-section-heading.test.tsx(§2's re-apply has nothing left to go into) andcard-properties.test.ts; kept the fork's ofcommit-surface.tsxand the right-panel composer'sIME test and focus timers.
ipc/filesystem-path-containment,the parcel watcher process files (
ipc/filesystem/watcher-process/),filesystem-watcher-ignore(
ipc/filesystem/watchers/) and the source-controlsection-order(nowshared/source-control-section-order.ts). Upstream renamed the shared "Switch to terminal view"key's text, so the Claude web error card has its own key; the chat View item takes upstream's
nullable shortcut label.
in
settings/fork-keybinding-title-copy.ts); settings transfer had to classify three new fields;defaultLabelandderiveNotesSendAgentTargets' arguments changed. Three files hit their linecaps: the fork's IPC registrations moved to
register-fork-core-handlers.ts, the fix-checksbackground surface to
fix-checks-agent-surface.ts, and the Auto-picked row became a memocomponent so upstream's
ReviewNotesSendMenuContent.test.tsx(exactly at its cap) needs no forklines. 31 locale keys only fork-removed UI used were deleted from every catalog. And upstream's
flaky-test ratchet crashed (
spawnSync git ENOBUFS) listing a sync's changed files againstorigin/main, so
fork-verify.ymlfetches upstream and runspnpm lintwithORCA_CODE_QUALITY_BASE=upstream/main, scoping the changed-file ratchets to the fork's own diff.ast-grep-ignorereasons on the e2e pauses that prove an absence.conflicts (
EditorPanel.tsx's diff provider, the image-preview test's imports). The new reviewvideo node used upstream's deleted
safe-react-node-view-rendererand now uses the stockrenderer; main's stepper test moved to
native-chat-image-stepper.test.tsxto keep theimage-preview test under its cap.
editor.openFileFromDiff(F4) needed a shortcut title.Verify finished, so it was merged again: three conflicts beside upstream's comment rewrites, and
F4's action is gone, so its title is too.
editor.showEdit/editor.showDiffneeded shortcut titles, andmain's removal of the old Open file strings missed
ru,trandzh-Hant.