mirror of
https://github.com/AutoMaker-Org/automaker.git
synced 2026-02-01 08:13:37 +00:00
- Add libs/platform/src/editor.ts with cross-platform editor detection and launching - Handles Windows .cmd batch scripts (cursor.cmd, code.cmd, etc.) - Supports macOS app bundles in /Applications and ~/Applications - Includes caching with 5-minute TTL for performance - Refactor open-in-editor.ts to use @automaker/platform utilities - Add POST /api/worktree/refresh-editors endpoint to clear cache - Add refresh button to Settings > Account for IDE selection - Update useAvailableEditors hook with refresh() and isRefreshing Fixes Windows issue where "Open in Editor" was falling back to Explorer because execFile cannot run .cmd scripts without shell:true. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
96 lines
3.9 KiB
TypeScript
96 lines
3.9 KiB
TypeScript
/**
|
|
* Worktree routes - HTTP API for git worktree operations
|
|
*/
|
|
|
|
import { Router } from 'express';
|
|
import { validatePathParams } from '../../middleware/validate-paths.js';
|
|
import { requireValidWorktree, requireValidProject, requireGitRepoOnly } from './middleware.js';
|
|
import { createInfoHandler } from './routes/info.js';
|
|
import { createStatusHandler } from './routes/status.js';
|
|
import { createListHandler } from './routes/list.js';
|
|
import { createDiffsHandler } from './routes/diffs.js';
|
|
import { createFileDiffHandler } from './routes/file-diff.js';
|
|
import { createMergeHandler } from './routes/merge.js';
|
|
import { createCreateHandler } from './routes/create.js';
|
|
import { createDeleteHandler } from './routes/delete.js';
|
|
import { createCreatePRHandler } from './routes/create-pr.js';
|
|
import { createPRInfoHandler } from './routes/pr-info.js';
|
|
import { createCommitHandler } from './routes/commit.js';
|
|
import { createPushHandler } from './routes/push.js';
|
|
import { createPullHandler } from './routes/pull.js';
|
|
import { createCheckoutBranchHandler } from './routes/checkout-branch.js';
|
|
import { createListBranchesHandler } from './routes/list-branches.js';
|
|
import { createSwitchBranchHandler } from './routes/switch-branch.js';
|
|
import {
|
|
createOpenInEditorHandler,
|
|
createGetDefaultEditorHandler,
|
|
createGetAvailableEditorsHandler,
|
|
createRefreshEditorsHandler,
|
|
} from './routes/open-in-editor.js';
|
|
import { createInitGitHandler } from './routes/init-git.js';
|
|
import { createMigrateHandler } from './routes/migrate.js';
|
|
import { createStartDevHandler } from './routes/start-dev.js';
|
|
import { createStopDevHandler } from './routes/stop-dev.js';
|
|
import { createListDevServersHandler } from './routes/list-dev-servers.js';
|
|
|
|
export function createWorktreeRoutes(): Router {
|
|
const router = Router();
|
|
|
|
router.post('/info', validatePathParams('projectPath'), createInfoHandler());
|
|
router.post('/status', validatePathParams('projectPath'), createStatusHandler());
|
|
router.post('/list', createListHandler());
|
|
router.post('/diffs', validatePathParams('projectPath'), createDiffsHandler());
|
|
router.post('/file-diff', validatePathParams('projectPath', 'filePath'), createFileDiffHandler());
|
|
router.post(
|
|
'/merge',
|
|
validatePathParams('projectPath'),
|
|
requireValidProject,
|
|
createMergeHandler()
|
|
);
|
|
router.post('/create', validatePathParams('projectPath'), createCreateHandler());
|
|
router.post('/delete', validatePathParams('projectPath', 'worktreePath'), createDeleteHandler());
|
|
router.post('/create-pr', createCreatePRHandler());
|
|
router.post('/pr-info', createPRInfoHandler());
|
|
router.post(
|
|
'/commit',
|
|
validatePathParams('worktreePath'),
|
|
requireGitRepoOnly,
|
|
createCommitHandler()
|
|
);
|
|
router.post(
|
|
'/push',
|
|
validatePathParams('worktreePath'),
|
|
requireValidWorktree,
|
|
createPushHandler()
|
|
);
|
|
router.post(
|
|
'/pull',
|
|
validatePathParams('worktreePath'),
|
|
requireValidWorktree,
|
|
createPullHandler()
|
|
);
|
|
router.post('/checkout-branch', requireValidWorktree, createCheckoutBranchHandler());
|
|
router.post(
|
|
'/list-branches',
|
|
validatePathParams('worktreePath'),
|
|
requireValidWorktree,
|
|
createListBranchesHandler()
|
|
);
|
|
router.post('/switch-branch', requireValidWorktree, createSwitchBranchHandler());
|
|
router.post('/open-in-editor', validatePathParams('worktreePath'), createOpenInEditorHandler());
|
|
router.get('/default-editor', createGetDefaultEditorHandler());
|
|
router.get('/available-editors', createGetAvailableEditorsHandler());
|
|
router.post('/refresh-editors', createRefreshEditorsHandler());
|
|
router.post('/init-git', validatePathParams('projectPath'), createInitGitHandler());
|
|
router.post('/migrate', createMigrateHandler());
|
|
router.post(
|
|
'/start-dev',
|
|
validatePathParams('projectPath', 'worktreePath'),
|
|
createStartDevHandler()
|
|
);
|
|
router.post('/stop-dev', createStopDevHandler());
|
|
router.post('/list-dev-servers', createListDevServersHandler());
|
|
|
|
return router;
|
|
}
|