Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
0031464
feat(desktop): UX improvements batch (clone progress, diff search, ke…
MocA-Love Apr 12, 2026
5a57251
fix(desktop): address PR #154 review comments
MocA-Love Apr 13, 2026
c251f3d
fix(desktop): address PR #154 review batch 2
MocA-Love Apr 13, 2026
7e3bea9
fix(desktop): emit clone done after project setup completes
MocA-Love Apr 13, 2026
e433cf4
fix(desktop): fix typecheck + import sort for PR #154
MocA-Love Apr 13, 2026
7c3a39a
feat(desktop): always-on debug logs for drag/search diagnostics
MocA-Love Apr 13, 2026
d544a9a
fix(desktop): defer search center scroll to next frame
MocA-Love Apr 13, 2026
39165e3
fix(desktop): drag-autoscroll + search center scroll root causes
MocA-Love Apr 13, 2026
4b7c2ed
chore(desktop): remove drag/search diagnostic logs
MocA-Love Apr 13, 2026
f8bff8e
fix(desktop): compute multi-select range order per FileList view mode
MocA-Love Apr 13, 2026
5a2c641
feat(desktop): VS Code-style multi-select for git diffs (Priority 1)
MocA-Love Apr 13, 2026
bd77b4a
feat(desktop): VS Code-style smart commit setting
MocA-Love Apr 13, 2026
d47ba2b
feat(desktop): VS Code-style auto-stash for pull/sync
MocA-Love Apr 13, 2026
184c061
feat(desktop): VS Code-style branch sort order
MocA-Love Apr 13, 2026
d8289fb
feat(desktop): VS Code-style post-commit command
MocA-Love Apr 13, 2026
7058fb7
feat(desktop): inline git user config form in commit-identity dialog
MocA-Love Apr 13, 2026
dcf9677
fix(desktop): address PR #154 review batch
MocA-Love Apr 13, 2026
7bc3200
fix(desktop): address PR #154 review batch 2
MocA-Love Apr 13, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
75 changes: 75 additions & 0 deletions apps/desktop/src/lib/trpc/routers/browser/browser.ts
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,81 @@ export const createBrowserRouter = () => {
return { success: true };
}),

findInPage: publicProcedure
.input(
z.object({
paneId: z.string(),
text: z.string(),
forward: z.boolean().optional(),
findNext: z.boolean().optional(),
matchCase: z.boolean().optional(),
}),
)
.mutation(({ input }) => {
const requestId = browserManager.findInPage(input.paneId, input.text, {
forward: input.forward,
findNext: input.findNext,
matchCase: input.matchCase,
});
return { requestId };
}),

stopFindInPage: publicProcedure
.input(
z.object({
paneId: z.string(),
action: z
.enum(["clearSelection", "keepSelection", "activateSelection"])
.optional(),
}),
)
.mutation(({ input }) => {
browserManager.stopFindInPage(
input.paneId,
input.action ?? "clearSelection",
);
return { success: true };
}),

onFoundInPage: publicProcedure
.input(z.object({ paneId: z.string() }))
.subscription(({ input }) => {
return observable<{
requestId: number;
activeMatchOrdinal: number;
matches: number;
finalUpdate: boolean;
}>((emit) => {
const handler = (data: {
requestId: number;
activeMatchOrdinal: number;
matches: number;
finalUpdate: boolean;
}) => {
emit.next(data);
};
browserManager.on(`found-in-page:${input.paneId}`, handler);
return () => {
browserManager.off(`found-in-page:${input.paneId}`, handler);
};
});
}),

onFindRequested: publicProcedure
.input(z.object({ paneId: z.string() }))
.subscription(({ input }) => {
return observable<{ type: "open" | "escape" }>((emit) => {
const openHandler = () => emit.next({ type: "open" });
const escapeHandler = () => emit.next({ type: "escape" });
browserManager.on(`find-requested:${input.paneId}`, openHandler);
browserManager.on(`find-escape:${input.paneId}`, escapeHandler);
return () => {
browserManager.off(`find-requested:${input.paneId}`, openHandler);
browserManager.off(`find-escape:${input.paneId}`, escapeHandler);
};
});
}),

setZoomLevel: publicProcedure
.input(z.object({ paneId: z.string(), level: z.number() }))
.mutation(({ input }) => {
Expand Down
14 changes: 14 additions & 0 deletions apps/desktop/src/lib/trpc/routers/changes/security/git-commands.ts
Original file line number Diff line number Diff line change
Expand Up @@ -294,6 +294,20 @@ export async function gitStageAll(worktreePath: string): Promise<void> {
await git.add("-A");
}

/**
* Stage all changes to tracked files only.
*
* Uses `git add -u` so modifications and deletions of tracked files
* are staged, but untracked files are left alone. Matches the
* VS Code `git.smartCommitChanges: "tracked"` behavior.
*/
export async function gitStageTracked(worktreePath: string): Promise<void> {
assertRegisteredWorktree(worktreePath);

const git = await getGitWithShellPath(worktreePath);
await git.add(["-u"]);
}

/**
* Unstage a file (remove from staging area).
*
Expand Down
9 changes: 9 additions & 0 deletions apps/desktop/src/lib/trpc/routers/changes/staging.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import {
gitStageAll,
gitStageFile,
gitStageFiles,
gitStageTracked,
gitStash,
gitStashIncludeUntracked,
gitStashPop,
Expand Down Expand Up @@ -127,6 +128,14 @@ export const createStagingRouter = () => {
return { success: true };
}),

stageTracked: publicProcedure
.input(z.object({ worktreePath: z.string() }))
.mutation(async ({ input }): Promise<{ success: boolean }> => {
await gitStageTracked(input.worktreePath);
clearStatusCacheForWorktree(input.worktreePath);
return { success: true };
}),

unstageAll: publicProcedure
.input(z.object({ worktreePath: z.string() }))
.mutation(async ({ input }): Promise<{ success: boolean }> => {
Expand Down
Loading
Loading