morphbox
Version:
Docker-based AI sandbox for development with Claude integration
63 lines (60 loc) • 2.15 kB
JavaScript
import { j as json } from './index-3BbzJtgI.js';
import { exec } from 'child_process';
import { promisify } from 'util';
import { W as WORKSPACE_DIR } from './workspace-CcQOwpY7.js';
import 'fs';
import 'path';
const execAsync = promisify(exec);
const GET = async () => {
try {
try {
await execAsync("git rev-parse --git-dir", { cwd: WORKSPACE_DIR });
} catch (error) {
return json({
currentBranch: "",
branches: [],
files: [],
error: "Not a git repository"
});
}
const { stdout: branch } = await execAsync("git branch --show-current", { cwd: WORKSPACE_DIR });
const currentBranch = branch.trim() || "main";
const { stdout: branchList } = await execAsync("git branch -a", { cwd: WORKSPACE_DIR });
const branches = branchList.split("\n").filter((b) => b.trim()).map((b) => {
const name = b.replace(/^\*?\s+/, "").trim();
const current = b.startsWith("*");
return { name, current };
});
const { stdout: status } = await execAsync("git status --porcelain=v1", { cwd: WORKSPACE_DIR });
const files = status.split("\n").filter((line) => line.trim()).map((line) => {
const indexStatus = line[0];
const workingStatus = line[1];
const path = line.substring(3);
let status2 = "modified";
let staged = false;
if (indexStatus === "A" || workingStatus === "A") {
status2 = "added";
} else if (indexStatus === "D" || workingStatus === "D") {
status2 = "deleted";
} else if (indexStatus === "R" || workingStatus === "R") {
status2 = "renamed";
} else if (indexStatus === "?" && workingStatus === "?") {
status2 = "untracked";
}
if (indexStatus !== " " && indexStatus !== "?") {
staged = true;
}
return { path, status: status2, staged };
});
return json({
currentBranch,
branches,
files
});
} catch (error) {
console.error("Git status error:", error);
return json({ error: "Failed to get git status" }, { status: 500 });
}
};
export { GET };
//# sourceMappingURL=_server.ts-Bxd73FcO.js.map