Archive merged PR workspaces from settings (#1313)

* Add workspace settings for merged PR cleanup

* Fix worktree branch ahead status

* Handle PR worktree upstream status

* Remove stale checkout tracking field

* Update settings E2E host section slugs

* Treat unknown upstream as unsafe for auto-archive
This commit is contained in:
Mohamed Boudra
2026-06-03 23:17:08 +08:00
committed by GitHub
parent bd4889e243
commit 369adced52
14 changed files with 262 additions and 75 deletions
@@ -10,6 +10,7 @@ import {
decodeWorkspaceIdFromPathSegment,
encodeFilePathForPathSegment,
encodeWorkspaceIdForPathSegment,
normalizeHostSectionSlug,
parseHostAgentRouteFromPathname,
parseHostWorkspaceOpenIntentFromPathname,
parseHostWorkspaceRouteFromPathname,
@@ -160,3 +161,18 @@ describe("projects settings routes", () => {
expect(decodeURIComponent(segment)).toBe(projectKey);
});
});
describe("host settings section slugs", () => {
it("keeps current host settings sections", () => {
expect(normalizeHostSectionSlug("connections")).toBe("connections");
expect(normalizeHostSectionSlug("agents")).toBe("agents");
expect(normalizeHostSectionSlug("workspaces")).toBe("workspaces");
expect(normalizeHostSectionSlug("providers")).toBe("providers");
expect(normalizeHostSectionSlug("host")).toBe("host");
});
it("maps old host settings sections to their new names", () => {
expect(normalizeHostSectionSlug("orchestration")).toBe("agents");
expect(normalizeHostSectionSlug("daemon")).toBe("host");
});
});
+19 -1
View File
@@ -391,14 +391,32 @@ export function isSettingsSectionSlug(value: string): value is SettingsSectionSl
return (SETTINGS_SECTION_SLUGS as readonly string[]).includes(value);
}
export const HOST_SECTION_SLUGS = ["connections", "orchestration", "providers", "daemon"] as const;
export const HOST_SECTION_SLUGS = [
"connections",
"agents",
"workspaces",
"providers",
"host",
] as const;
export type HostSectionSlug = (typeof HOST_SECTION_SLUGS)[number];
const LEGACY_HOST_SECTION_SLUGS: Record<string, HostSectionSlug> = {
orchestration: "agents",
daemon: "host",
};
export function isHostSectionSlug(value: string): value is HostSectionSlug {
return (HOST_SECTION_SLUGS as readonly string[]).includes(value);
}
export function normalizeHostSectionSlug(value: string): HostSectionSlug | null {
if (isHostSectionSlug(value)) {
return value;
}
return LEGACY_HOST_SECTION_SLUGS[value] ?? null;
}
export function buildSettingsRoute() {
return "/settings" as const;
}