Files
agent-radar 2ed3415fb7
Publish Claude Code Binaries / Stage and publish binaries (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-arm64 (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build linux-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build windows-amd64 (push) Canceled after 0s
Sync Tutti Agent Skills / sync (push) Canceled after 0s
Windows Agent Adapters / Test Windows agent adapters (push) Canceled after 0s
Windows Daemon Adapters / Test Windows daemon adapters (push) Canceled after 0s
Publish Tutti App Runtime / Publish runtime catalog (push) Canceled after 0s
源码快照 @ 2026-09-01 (source-only, 剔除非源码素材)
2026-09-01 20:17:27 +08:00

51 lines
1.4 KiB
TypeScript

export interface TuttiProtectedDeletionIssue {
executionId: string;
issueId: string;
sourceSessionId: string;
status: string;
}
export interface TuttiProtectedDeletionConflict {
protectedIssues: readonly TuttiProtectedDeletionIssue[];
}
export function parseTuttiProtectedDeletionConflict(
error: unknown
): TuttiProtectedDeletionConflict | null {
if (!error || typeof error !== "object") {
return null;
}
const candidate = error as {
code?: unknown;
reason?: unknown;
details?: { protectedIssues?: unknown };
};
if (
candidate.code !== "workspace_issue_resource_exists" ||
candidate.reason !== "tutti_execution_active" ||
!Array.isArray(candidate.details?.protectedIssues)
) {
return null;
}
const protectedIssues = candidate.details.protectedIssues.flatMap((item) => {
if (!item || typeof item !== "object") {
return [];
}
const value = item as Record<string, unknown>;
return typeof value.issueId === "string" &&
typeof value.executionId === "string" &&
typeof value.sourceSessionId === "string" &&
typeof value.status === "string"
? [
{
executionId: value.executionId,
issueId: value.issueId,
sourceSessionId: value.sourceSessionId,
status: value.status
}
]
: [];
});
return protectedIssues.length > 0 ? { protectedIssues } : null;
}