Commit Graph
10019 Commits
Author SHA1 Message Date
6233b8e8a4 feat: Add GitHub PR review workflow to tasks (#1172)
* Render GitHub markdown safely

Co-authored-by: Orca <help@stably.ai>

* Support PR line comment ranges in diffs

Co-authored-by: Orca <help@stably.ai>

* Add GitHub item dialog review workflow

Co-authored-by: Orca <help@stably.ai>

* Make attribution tests environment-safe

Co-authored-by: Orca <help@stably.ai>

* Wire GitHubItemDialog for row clicks and bound file cache

Row clicks in the Tasks GitHub list now open the new GitHubItemDialog
instead of the legacy GitHubItemDrawer, making the PR review workflow
reachable from the main entry point. The unused drawer and its state
are removed.

Also bounds prFileContentCache at 64 entries with LRU eviction so the
module-level map can no longer grow without limit across many PR
openings in a session.

Co-authored-by: Orca <help@stably.ai>

* Convert GitHubItemDialog to a right-side drawer

Replaces the centered Dialog modal with a Sheet drawer (side=right,
max-w 960/1100/1280 across breakpoints) so the review surface slides
in from the side instead of popping over the task list.

Co-authored-by: Orca <help@stably.ai>

* Address review feedback on GitHub work-item details

- Restore full pagination in listAssignableUsers (REST /assignees --paginate)
  so repos with >100 assignees no longer silently drop users from the picker.
- Drop redundant REST /users/<login> fan-out in getMentionParticipants; the
  aliased GraphQL query already returns login/name/avatarUrl.
- Parallelize mention-participant lookup with checks/participants fetch.
- Avoid mutating caller-provided objects in mergeGitHubUsers.
- Type addIssueComment / addPRReviewComment(Reply) preload wrappers as
  Promise<GitHubCommentResult> instead of Promise<unknown>.
- Use typeof startLine === 'number' to harden the review-comment guard.

Co-authored-by: Orca <help@stably.ai>

---------

Co-authored-by: Orca <help@stably.ai>
Co-authored-by: Jinjing <6427696+AmethystLiang@users.noreply.github.com>
2026-04-28 00:11:39 -07:00
JinjingandOrca 3bf738fc7f test(ui): fix openTaskPage tests by including nav-history slice (#1208)
* feat(nav): back/forward traverses Tasks page visits

Widens worktree nav history entries to string | 'tasks' so the titlebar
back/forward buttons and Cmd/Ctrl+Alt+Arrow shortcut work from the Tasks
page. openTaskPage records a 'tasks' entry; closeTaskPage rewinds the
index when parked on one; goBack/goForward dispatches Tasks entries via
a separate view activator to bypass openTaskPage side effects.

Co-authored-by: Orca <help@stably.ai>

* test(ui): include worktree-nav-history slice in test store

openTaskPage calls get().recordViewVisit('tasks'), which lives in
the worktree-nav-history slice. The ui.test.ts store was composing
only the UI slice, so the two settings-navigation tests threw
TypeError: get(...).recordViewVisit is not a function.

Co-authored-by: Orca <help@stably.ai>

---------

Co-authored-by: Orca <help@stably.ai>
2026-04-27 23:53:00 -07:00
JinjingandOrca bdf5f66ffd feat(nav): back/forward traverses Tasks page visits (#1207)
Widens worktree nav history entries to string | 'tasks' so the titlebar
back/forward buttons and Cmd/Ctrl+Alt+Arrow shortcut work from the Tasks
page. openTaskPage records a 'tasks' entry; closeTaskPage rewinds the
index when parked on one; goBack/goForward dispatches Tasks entries via
a separate view activator to bypass openTaskPage side effects.

Co-authored-by: Orca <help@stably.ai>
2026-04-27 23:49:34 -07:00
github-actions[bot] 8aff317fc0 release: v1.3.23-rc.2 v1.3.23-rc.2 2026-04-28 06:40:35 +00:00
NeilandOrca db7b633d23 fix(notifications): restore agent-task-complete dispatch broken by #944 (#1200)
Co-authored-by: Orca <help@stably.ai>
2026-04-27 23:39:21 -07:00
JinjingandOrca e25da448ee fix(monaco): disable syntax validation in diff viewer (#1206)
The sandboxed TS worker parses concatenated original+modified text in
the diff viewer, producing fake parse errors like "',' expected (1005)".
Disable syntax validation alongside the already-disabled semantic and
suggestion diagnostics; tokenization still provides colorization.

Co-authored-by: Orca <help@stably.ai>
2026-04-27 23:35:38 -07:00
JinjingandOrca 37e554b65a Squashed commits (#1203)
- fix(browser-pane): ensure tooltip reliably triggers on container hover

Co-authored-by: Orca <help@stably.ai>
2026-04-27 23:30:59 -07:00
JinjingandOrca 6cd8a92e20 fix(e2e): update worktree test for tabbed Create Workspace modal (#1202)
Remove assertions on StartFromField (deleted in #1191); keep getBaseRefDefault
IPC round-trip + render-error sweep as the #1186 regression guard.

Co-authored-by: Orca <help@stably.ai>
2026-04-27 23:30:09 -07:00
JinjingandOrca 6212bc76b4 feat(cmd-j): sort by recency on empty query with worktree cap (#1201)
Empty-query Cmd+J now uses pure recency (lastActivityAt) so it's a predictable jump-back surface. Typing still uses smart-sort for ranking. Adds a hint row when worktrees are capped and browser tabs are present.

Co-authored-by: Orca <help@stably.ai>
2026-04-27 23:25:43 -07:00
JinjingandOrca 9a7cfd4985 fix(ssh): support new markdown file creation on SSH worktrees (#1199)
Skip the local shell.pathExists probe when a connectionId is present and
forward connectionId through to fs.createFile, so 'New Markdown File'
works on SSH worktrees.

Co-authored-by: Orca <help@stably.ai>
2026-04-27 23:03:03 -07:00
github-actions[bot] 8559d07509 release: v1.3.23-rc.1 v1.3.23-rc.1 2026-04-28 05:48:26 +00:00
NeilandOrca 0e8571b58d Tabbed Create Workspace dialog (Quick / Create from…) (#1191)
Co-authored-by: Orca <help@stably.ai>
2026-04-27 22:48:04 -07:00
JinjingandOrca a110b6d794 feat(ui): unify SSH workspace icon to Server across all surfaces (#1198)
SSH workspaces previously rendered as Globe in some places and Wifi in
others. Globe implies web/internet and Wifi implies wireless network
strength — neither reads as "remote machine". Use Server/ServerOff
across every SSH context for a consistent mental model. Globe remains
in true browser/web surfaces (browser pane, address bar, tabs, clone
from URL, Browser settings pane).

Co-authored-by: Orca <help@stably.ai>
2026-04-27 22:31:11 -07:00
Jinwoo HongandOrca 3abf68dbef fix(terminal): restore cursor visibility after scrollback replay (#1192)
Co-authored-by: Orca <help@stably.ai>
2026-04-27 21:50:13 -07:00
Brennan BensonandOrca 4279fc8075 feat(agent-hooks): on-disk endpoint discovery for surviving PTYs (v2) (#1196)
Co-authored-by: Orca <help@stably.ai>
2026-04-27 21:49:18 -07:00
Brennan BensonandOrca 812ca5488b fix(preload): collapse index.d.ts into type-checked api-types.ts (#1197)
Co-authored-by: Orca <help@stably.ai>
2026-04-27 21:46:17 -07:00
Brennan BensonandOrca 76a1c691e9 test(e2e): assert on rendered DOM in 5 specs previously store-tautologies (#1194)
Co-authored-by: Orca <help@stably.ai>
2026-04-27 20:55:47 -07:00
github-actions[bot] 4563d753bf release: v1.3.22 v1.3.22 2026-04-28 02:42:39 +00:00
Brennan BensonandOrca 1cfc3256c5 feat(status-bar): restructure memory/CPU popover and add row actions (#1190)
Co-authored-by: Orca <help@stably.ai>
2026-04-27 18:11:59 -07:00
Brennan BensonandOrca 0ea27dfdd2 test(e2e): drive real composer flow for worktree creation (#1193)
Co-authored-by: Orca <help@stably.ai>
2026-04-27 17:42:03 -07:00
github-actions[bot] 8f97e0009e release: v1.3.22-rc.6 v1.3.22-rc.6 2026-04-27 23:54:23 +00:00
Neil 1839a50c92 fix(new-workspace): unwrap getBaseRefDefault envelope in StartFromField (#1189) 2026-04-27 16:53:45 -07:00
Brennan BensonandOrca 3fe7162634 fix(sidebar): don't bump lastActivityAt when worktree is activated by click (#1169)
Co-authored-by: Orca <help@stably.ai>
2026-04-27 15:53:52 -07:00
github-actions[bot] 821c9639fd release: 1.3.22-rc.5 [rc-slot:2026-04-27-15] v1.3.22-rc.5 2026-04-27 22:14:03 +00:00
github-actions[bot] d8beb057c9 release: v1.3.22-rc.4 v1.3.22-rc.4 2026-04-27 21:55:00 +00:00
Brennan BensonandOrca 3edb2f3ea2 fix(updater): surface user-initiated check failures when GitHub is down (#1181)
Co-authored-by: Orca <help@stably.ai>
2026-04-27 14:50:39 -07:00
Kevin Acuña 7f6d42134d fix: resolve letter window shortcuts by layout-aware key (Dvorak/Colemak/AZERTY) (#1015) 2026-04-27 14:09:35 -07:00
github-actions[bot] 4d9816283a release: v1.3.22-rc.3 v1.3.22-rc.3 2026-04-27 21:05:44 +00:00
Brennan BensonandOrca 76139f88a9 fix: support upstream remote as base ref for fork workflows (#1186)
Co-authored-by: Orca <help@stably.ai>
2026-04-27 13:51:19 -07:00
NeilandOrca 4ad1458fad fix(release): derive prerelease state from tag shape, not release flag (#1187)
Two interacting bugs produced v1.3.1-rc.4 today:

1. release-cut.yml used `gh release list --exclude-pre-releases` to
   find latest_stable. That filter checks the GitHub `isPrerelease`
   flag, which had been flipped to `false` on several RC releases
   (including v1.3.22-rc.2 and v1.3.1-rc.3). The query returned an
   RC tag, and bump() then silently mis-parsed `1.3.1-rc.3` via
   `Number("1-rc") = NaN` -> `(NaN||0)+1 = 1`, yielding base=1.3.1.

   Fix: filter by tag shape (no `-rc.`) in jq so an RC tag can never
   be treated as stable, regardless of metadata. Also strip any
   prerelease suffix in bump() and semver_gt() so the numeric math
   is robust even if a caller passes a dirty input.

2. release.yml's final publish step only ran `--draft=false`, leaving
   the `prerelease` flag at whatever electron-builder last wrote. When
   that flag ended up false on an RC, GitHub marked the RC as the
   "latest" release.

   Fix: re-assert `--prerelease=<derived from tag>` alongside
   `--draft=false` so the final state is a function of the tag name,
   not of any intermediate publisher behavior.

Co-authored-by: Orca <help@stably.ai>
2026-04-27 13:49:41 -07:00
github-actions[bot] 6b7d7d7cc0 release: v1.3.1-rc.4 v1.3.1-rc.4 2026-04-27 20:02:27 +00:00
Brennan BensonandOrca dd1ed7c697 fix(cli): record back/forward history for CLI-activated worktrees (#1166)
Co-authored-by: Orca <help@stably.ai>
2026-04-27 12:43:02 -07:00
Jinwoo HongandOrca 75c6f25887 feat(linear): add create-issue button for feature parity with GitHub (#1185)
Co-authored-by: Orca <help@stably.ai>
2026-04-27 12:28:09 -07:00
Jinwoo Hong ba0f263df1 Fix shell-ready zsh wrapper self loops (#1184) 2026-04-27 12:13:45 -07:00
Jinwoo Hong d8d2c0f033 Scope pending PTY spawns to terminal panes (#1182) 2026-04-27 11:55:56 -07:00
Jinwoo HongandOrca ead2368230 fix(tab-bar): dismiss new-tab menu when clicking browser webview (#1183)
Co-authored-by: Orca <help@stably.ai>
2026-04-27 11:45:31 -07:00
JinjingandOrca 6978e6a4aa feat(cmd-j): show Recent Worktrees section + repo/branch composite search (#1180)
- Surface top 3 worktrees under a RECENT WORKTREES header on empty query
  when there are ≥4 worktrees, with a WORKTREES header for the rest
- Support "repo/branch" composite queries in the palette search, with
  highlight ranges on both segments
- Add placeholder hint for the new composite query

Co-authored-by: Orca <help@stably.ai>
2026-04-27 11:32:40 -07:00
github-actions[bot] 8cce94eb5a release: v1.3.1-rc.3 v1.3.1-rc.3 2026-04-27 18:32:06 +00:00
JinjingandOrca 6d2212c068 chore: remove pr-size-labeler workflow and config (#1177)
- chore: remove pr-size-labeler workflow and config

Co-authored-by: Orca <help@stably.ai>
2026-04-27 10:11:21 -07:00
github-actions[bot] a06b85078f release: v1.3.22-rc.2 v1.3.22-rc.2 2026-04-27 17:04:54 +00:00
JinjingandOrca 91b7068ab4 fix(sidebar): Cmd+Shift+Up/Down crosses Pinned/All boundary when collapsed (#1176)
Derive keyboard cycle order from an all-expanded layout so collapsed groups don't cause worktrees to be skipped, and uncollapse the All header on reveal when groupBy is 'none'.

Co-authored-by: Orca <help@stably.ai>
2026-04-27 09:59:29 -07:00
JinjingandOrca abd0ab9f49 fix(monaco): disable semantic validation in diff viewer (#1175)
- fix(monaco): disable semantic validation in diff viewer

Monaco's sandboxed TS worker cannot resolve cross-file imports, cascading
into a long tail of false semantic diagnostics beyond the previously-ignored
codes. Replace the growing ignore list with noSemanticValidation; keep
syntax validation for genuine parse errors.

Co-authored-by: Orca <help@stably.ai>
2026-04-27 09:58:41 -07:00
JinjingandOrca 2c2d970c14 fix(cmd-j-palette): increase selected row contrast (#1174)
- fix(cmd-j-palette): increase selected row contrast

Co-authored-by: Orca <help@stably.ai>
2026-04-27 09:57:08 -07:00
JinjingandOrca cfe247659a opt: disable GitHub attribution by default (#1173)
Co-authored-by: Orca <help@stably.ai>
2026-04-27 09:53:33 -07:00
github-actions[bot] 830b78e0a7 release: 1.3.22-rc.1 [rc-slot:2026-04-27-03] v1.3.22-rc.1 2026-04-27 10:35:49 +00:00
github-actions[bot] 4af21e1793 release: v1.3.22-rc.0 v1.3.22-rc.0 2026-04-27 07:49:33 +00:00
NeilandOrca 5fe4fd4853 fix(pty): honor Windows shell selection on daemon path + shell-specific icons (#1164)
* fix(pty): honor Windows shell selection on the daemon path + shell-specific icons

The "+" menu picker and the Settings → Default Shell preference both set a
shellOverride, but the daemon-backed PTY path never forwarded it. Every
Windows terminal ended up as PowerShell (or cmd.exe via COMSPEC) no matter
what the user picked.

Fix:
- Thread shellOverride through daemon-pty-adapter → createOrAttach RPC →
  terminal-host → pty-subprocess, and actually resolve the correct launch
  args (chcp for CMD, $PROFILE dot-sourcing for PowerShell, /mnt/<drive>
  cwd translation for WSL) on the daemon path.
- Extract the Windows shell-args decision into a shared helper
  (resolveWindowsShellLaunchArgs) so LocalPtyProvider and the daemon
  spawner cannot drift again.
- In ipc/pty.ts, fall back to the persisted terminalWindowsShell setting
  when no per-tab override is sent, so the daemon path honors the user's
  Default Shell preference the same way LocalPtyProvider already did.

UI polish on the "+" dropdown and tab strip:
- Drop the "Default" tag next to the top entry (takes too much space).
- Rename "Command Prompt" → "CMD Prompt" to fit next to the Ctrl+T hint.
- Replace the generic terminal glyph with brand-style icons per shell
  (ShellIcon). Both the "+" menu and the per-tab strip use the same
  icon set so a WSL tab is visually distinct from a PowerShell tab.

Co-authored-by: Orca <help@stably.ai>

* fix(daemon): add oxlint-disable max-lines to daemon-server

CI counts 312 non-blank/non-comment lines for daemon-server.ts after the
shellOverride plumbing was added, exceeding the 300-line .ts override.
The file is a single RPC route table; splitting it would leak the host
reference across modules for no readability win, so add a scoped disable
with the rationale.

Co-authored-by: Orca <help@stably.ai>

* chore(lint): disable max-lines on pre-existing 312-line tabs-hydration test

Unrelated to the shell-selection fix, but surfaced on PR CI: the file is
right at oxlint's 300-line .ts ceiling; each case in the table is a
minimal fixture + assertion, so splitting it across files would scatter
closely related regression coverage for a single reducer.

Co-authored-by: Orca <help@stably.ai>

* chore(lint): disable max-lines on shared text-search module

The shared text-search module exceeds oxlint's 300-line .ts ceiling. It
is the single source of truth for rg arg construction, rg --json parsing,
git-grep submatch parsing, and relative-path normalization shared between
the local main process and the SSH relay. Re-splitting it would
re-introduce the maxBuffer divergence the design doc explicitly calls out.

Also reverts two speculative oxlint-disable directives on daemon-server
and tabs-hydration.test — those files were not the offender; CI's error
message elides the file path but running the lint locally against the
PR-merge commit pinpointed text-search.ts.

Co-authored-by: Orca <help@stably.ai>

---------

Co-authored-by: Orca <help@stably.ai>
2026-04-27 00:47:15 -07:00
NeilandOrca aac395dbff fix(release-cut): anchor RC base to latest_stable + patch (#1163)
The rc branch previously derived the base version from the highest
git tag, which reopened an already-shipped series: after v1.3.21
stable was published, cutting an RC still produced v1.3.21-rc.N.
Anchor RCs to latest_stable + patch so a fresh RC after v1.3.21
correctly resolves to v1.3.22-rc.0. Minor/major RCs are cut by
running that stable kind first, which is a clearer workflow than
the old heuristic.

Co-authored-by: Orca <help@stably.ai>
2026-04-27 00:09:27 -07:00
Brennan BensonandOrca 8347b3099d test(opencode): add buildPtyEnv/clearPty round-trip coverage (#1162)
Co-authored-by: Orca <help@stably.ai>
2026-04-27 00:07:19 -07:00
JinjingandOrca 099c4089a7 refactor(search): share rg/git-grep logic between main and relay (#1157)
Extracts rg and git-grep search logic into src/shared/text-search.ts so
the local main and SSH relay paths stop reinventing arg construction,
JSON parsing, submatch regex, and accumulator/truncation semantics.

Fixes silent truncation in the relay: searchWithRg used execFile with
a 50MB maxBuffer cap that rg --json easily exceeds on large repos,
dropping matches with no error surfaced to the user. The relay now
streams via spawn, matching the local path.

See docs/design/share-text-search.md for full rationale.

Co-authored-by: Orca <help@stably.ai>
2026-04-27 00:06:00 -07:00