Commit Graph
11 Commits
Author SHA1 Message Date
Neil d2a53c8fcc New workspace create page (#710)
* New workspace page with agent catalog, composer modal, and terminal integration

* fix lint

* better blank state

* fix: resolve typecheck errors in new-workspace flow

- widen activateAndRevealWorktree's issueCommand to accept direct
  command shape used by NewWorkspacePage, not just the main-process
  runner-script variant
- use a ref object in pty-connection tests to dodge TS narrowing the
  captured callback to never across the mock closure boundary

* fix: bound worktree name auto-suffix loop to prevent OOM in tests

The auto-suffix loop in createLocalWorktree had no termination cap.
When tests (or a misconfigured env) mocked getBranchConflictKind /
getPRForBranch to always return a collision, the loop ran forever and
the vitest worker crashed with "Ineffective mark-compacts near heap
limit".

Cap the search at 100 suffixes, and if all fail, fall back to the
original specific error messages (branch already exists / PR already
owns the name) instead of a generic failure.

Update the two tests that asserted the old throw-on-first-conflict
behavior to verify the new auto-suffix path end-to-end.
2026-04-16 15:41:40 -07:00
Neil e5890f8e3f Fix stale test mocks after runner migration (#516) 2026-04-11 22:47:30 -07:00
Jinjing 8e77aca170 fix: fetch PR checks by head sha (#312) 2026-04-05 11:54:53 -07:00
Jinjing f2eb119c62 feat: display CI conflict details and improve merge-conflict UX (#234)
- Add PRConflictSummary type and derive conflict metadata (base ref,
  commits behind, conflicting files) via local git merge-tree
- Fix parseUnmergedEntry to use space-separated parsing (porcelain v2
  unmerged entries are not tab-separated)
- Enhance rebase detection by checking rebase-merge/ and rebase-apply/
  directories in addition to REBASE_HEAD
- Show conflicting files list and commits-behind count in ChecksPanel
- Disable merge button with tooltip when PR has conflicts
- Add operation banners (merge/rebase/cherry-pick) in SourceControl
  and WorktreeCard
- Reorder section list so unstaged changes appear above staged
- Extract conflict-summary, issues, and gh-utils into separate modules
- Add 10s timeout to git fetch in conflict summary derivation
- Fix test fixtures to match real porcelain v2 format
2026-03-31 01:27:39 -07:00
Jinjing e2bb60339f feat: surface merge conflict warning in checks panel (#206) 2026-03-29 16:27:18 -07:00
Jinjing dbab855611 fix: guard against empty branch names in PR check status lookups (#182)
During a rebase with detached HEAD, the branch name can be empty or
resolve to empty after stripping refs/heads/. This caused gh to return
arbitrary PRs and created invalid cache keys like "path::".

Guard all branch-to-cache-key paths: getPRForBranch bails before
acquiring the semaphore, renderer components skip cache lookups,
and syncPRChecksStatus validates the normalized branch.
2026-03-28 16:10:56 -07:00
Jinjing e8f2dcb57d fix: use gh pr list --head for reliable PR discovery (#162)
gh pr view only matches the current checkout, which fails for worktrees
on different branches. Switch to gh pr list --repo --head to query by
branch name directly, with a fallback to gh pr view for non-GitHub
remotes. Also fix the ChecksPanel refresh button to use the proper
handleRefresh flow and force-refresh the PR cache.
2026-03-28 00:30:47 -07:00
JinjingandClaude Opus 4.6 b891b07189 feat: reduce GitHub API usage with gh api --cache for conditional requests (#132)
- Use gh api --cache for issues, issue lists, and PR checks endpoints so 304 Not Modified responses don't count against the rate limit
- Pass branch to getPRChecks to enable the check-runs REST endpoint with caching
- Extract mapping functions into separate mappers.ts to keep client.ts within 300-line limit
- Extract mapIssueInfo() helper to deduplicate issue mapping logic
- Remove dead re-exports from client.ts
- Fix reference instability in ChecksPanel poll dependency array

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-26 17:15:49 -07:00
JinjingandClaude Opus 4.6 69978c93f5 test: expand test coverage and extract worktree logic into testable module (#108)
Add comprehensive tests for worktree parsing, GitHub check status derivation,
hooks YAML parsing, persistence store, layout serialization, store cascades,
and terminal helpers. Extract pure functions from worktrees.ts into
worktree-logic.ts for better testability.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-25 22:34:20 -07:00
JinjingandClaude Opus 4.6 4c0eee235b fix: extract path-security helpers, add tests, and improve type safety (#102)
* fix: extract path-security helpers and refactor IPC modules

- Extracted path-security helpers from filesystem.ts into filesystem-auth.ts to fix max-lines lint error (402 -> 293 lines)
- Extracted duplicated ENOENT detection into isENOENT() helper to eliminate code duplication
- Fixed missing curly braces on single-line if-return in isDescendantOrEqual (lint violation)
- Replaced any with unknown in test files to satisfy lint rules
- All tests passing (29/29)
- Lint clean (0 errors, 0 warnings)

* fix: bundle preload deps for sandbox mode and fix editor test types

The sandbox: true change in createMainWindow broke the app because
electron-vite was externalizing @electron-toolkit/preload, producing
a require() call that fails in sandboxed preload scripts. Exclude it
from externalization so it gets bundled inline.

Also fix type errors in editor.test.ts from the partial store setup.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-25 09:59:19 -07:00
Jinjing 9c5a1f48bb Add PR checks workflow and Vitest coverage (#97) 2026-03-24 20:53:38 -07:00